1 回答

TA貢獻1884條經驗 獲得超4個贊
使用 Linq 相當簡單GroupBy:
var input = new [] {1,1,1,2,2,3,3,3,4,4};
var output = input.GroupBy(x => x)
.OrderByDescending(x => x.Count())
.Select(x => x.Key)
.ToList();
GroupBy(x => x)
:創建 4 個組的列表。每個組都有一個鍵,它是數字,值是組的成員。所以你會有類似的東西{ 1: [1, 1, 1], 2: [2, 2], 3: [3, 3, 3], 4: [4, 4] }
OrderByDescending(x => x.Count())
:按組中項目的數量對組進行排序,最大的組在前。所以你得到{ 1: [1, 1, 1], 3: [3, 3, 3], 2: [2, 2], 4: [4, 4] }
Select(x => x.Key)
:從每組中取出鑰匙,所以你得到[1, 3, 2, 4]
ToList()
: 把它全部變成一個列表
如果有兩組具有相同數量的項目——在您的示例中,有三個 1 和三個 3——那么這將按照它們在輸入中出現的順序對它們進行排序(因此,這里的輸出是[1, 3, 2, 4]
,因為 1在輸入中出現在 3 之前)。
這是因為(見備注)的排序行為:GroupBy
IGrouping 對象的生成順序基于生成每個 IGrouping 的第一個鍵的源中元素的順序。分組中的元素按照它們在源代碼中出現的順序生成。
并且事實OrderByDescending
是穩定的(同樣,請參見備注),因此如果兩個項目比較相等,則它們的順序將被保留)。
此方法執行穩定排序;也就是說,如果兩個元素的鍵值相等,則保留元素的順序。相反,不穩定排序不會保留具有相同鍵的元素的順序。
- 1 回答
- 0 關注
- 113 瀏覽
添加回答
舉報