روش اول
برای ساخت یک لیست بلند یا با طول مشخص شده به طوری که تعدادی کاراکتر یا کلمه دریافت کند و لیستی بدون تکرار و کاملا منحصر به فرد تولید کند می توانید از قطعه کد زیر استفاده کنید :
پلتفرم بوی اجرا شدن خروجی صحیح قطعه کد زیر را تایید می کند
قطعه کدی که در زیر مشاهده می کنید توسط برنامه کامپایلر به جهت تست آزمایش شده و خروجی صحیح مدنظر را بدست آورد.
public static IEnumerable<IEnumerable<T>> Permute<T>(IEnumerable<T> list, int count) { if (count == 0) { yield return new T[0]; } else { int startingElementIndex = 0; foreach (T startingElement in list) { IEnumerable<T> remainingItems = AllExcept(list, startingElementIndex); foreach (IEnumerable<T> permutationOfRemainder in Permute(remainingItems, count - 1)) { yield return Concat<T>( new T[] { startingElement }, permutationOfRemainder); } startingElementIndex += 1; } } } // Enumerates over contents of both lists. public static IEnumerable<T> Concat<T>(IEnumerable<T> a, IEnumerable<T> b) { foreach (T item in a) { yield return item; } foreach (T item in b) { yield return item; } } // Enumerates over all items in the input, skipping over the item // with the specified offset. public static IEnumerable<T> AllExcept<T>(IEnumerable<T> input, int indexToSkip) { int index = 0; foreach (T item in input) { if (index != indexToSkip) yield return item; index += 1; } }
IEnumerable<T> remainingItems = list.Skip(startingElementIndex + 1);
روش دوم
می توانید از قطعه کد زیر و خروجی بدست آمده آن استفاده کنید :
void Main() { var list = new List<string> { "a", "b", "c", "d", "e" }; var result = GetPermutations(list, 3); } IEnumerable<IEnumerable<T>> GetPermutations<T>(IEnumerable<T> items, int count) { int i = 0; foreach(var item in items) { if(count == 1) yield return new T[] { item }; else { foreach(var result in GetPermutations(items.Skip(i + 1), count - 1)) yield return new T[] { item }.Concat(result); } ++i; } }
a, b a, c a, d a, e b, c b, d b, e c, d c, e d, e
در صورتی که 3 کاراکتر وارد کرده باشید خروجی به صورت زیر خواهد بود :
a, b, c a, b, d a, b, e a, c, d a, c, e a, d, e b, c, d b, c, e b, d, e c, d, e
کدهای بیشتر - سی شارپ
آیا این مطلب برای شما مفید بود؟
از اینکه بازخورد خود را در اختیار ما گذاشته اید متشکریم. تا بعد 🙂