
روش اول
برای ساخت یک لیست بلند یا با طول مشخص شده به طوری که تعدادی کاراکتر یا کلمه دریافت کند و لیستی بدون تکرار و کاملا منحصر به فرد تولید کند می توانید از قطعه کد زیر استفاده کنید :
پلتفرم بوی اجرا شدن خروجی صحیح قطعه کد زیر را تایید می کند
قطعه کدی که در زیر مشاهده می کنید توسط برنامه کامپایلر به جهت تست آزمایش شده و خروجی صحیح مدنظر را بدست آورد.
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
کدهای بیشتر - سی شارپ
آیا این صفحه برای شما مفید بود؟
از اینکه بازخورد خود را در اختیار ما گذاشته اید متشکریم. تا بعد 🙂

