假設我有一個從1 - 3的項目列表。如何在C#中使用linq查詢來排序循環順序?
我可以命令他們1,1,2,2,3,3。
但是,相反,我想通過1,2,3,1,2,3命令他們....
是否有一個已經存在的功能來實現這一目標?
假設我有一個從1 - 3的項目列表。如何在C#中使用linq查詢來排序循環順序?
我可以命令他們1,1,2,2,3,3。
但是,相反,我想通過1,2,3,1,2,3命令他們....
是否有一個已經存在的功能來實現這一目標?
該方法將每個數字分成組,然後按順序迭代組,然後有條件地將它們添加到結果列表中。可能有更多的方法可以讓這個更安全,更高效,但這應該給你一個開始。 (它假定如果沒有源陣列中的每個號碼的相等計數,它將作爲它在迭代階段耗盡它們的跳過這些數字。)
int[] arr = new[] { 1,1,1,2,2,2,3,3,3,4,4,4,5,5,5 };
var orderList = arr.OrderBy(x => x).Distinct().ToArray();
var refList = arr.GroupBy(x => x).ToDictionary(k => k.Key, v => v.Count());
var result = new List<int>();
int i = 0;
while (result.Count < arr.Length)
{
if (refList.Values.Sum() == 0)
break;
if (refList[orderList[i]] > 0)
{
result.Add(orderList[i]);
refList[orderList[i]]--;
}
i++;
if (i >= orderList.Length)
i = 0;
}
// Result: [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5]
我一般都有這個想法。我會爲自己嘗試一下,因爲1,2,3只是我擁有的一種物體。 –
或潛在的:var result = Enumerable.Range(arr.Min(),arr.GroupBy(x => x).First()。Count()) .SelectMany(y => arr.OrderBy(x => x).Distinct()。ToList());' – CodingYoshi
@CodingYoshi假設A]源列表中的數字保證按順序排列,並且B]保證源列表中每個數字的計數爲等於。 – Abion47
否,不存在。我甚至無法用一兩個單詞來命名這種分類。你可以自己實現它。 –
單獨使用LINQ可能在技術上是可行的,但它會很混亂。自己實施它將會更加清潔和高效。 – Abion47
沒有意義。如果它是'1,1,2,2,3,3,3,3,4',輸出結果如何?開箱即用的Linq提供了一些常見的實現,例如按順序或降序排列。這個順序是什麼?看起來像一個非常具體的案例 – CodingYoshi