1 回答

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用 Linq 相當(dāng)簡(jiǎn)單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)
:創(chuàng)建 4 個(gè)組的列表。每個(gè)組都有一個(gè)鍵,它是數(shù)字,值是組的成員。所以你會(huì)有類似的東西{ 1: [1, 1, 1], 2: [2, 2], 3: [3, 3, 3], 4: [4, 4] }
OrderByDescending(x => x.Count())
:按組中項(xiàng)目的數(shù)量對(duì)組進(jìn)行排序,最大的組在前。所以你得到{ 1: [1, 1, 1], 3: [3, 3, 3], 2: [2, 2], 4: [4, 4] }
Select(x => x.Key)
:從每組中取出鑰匙,所以你得到[1, 3, 2, 4]
ToList()
: 把它全部變成一個(gè)列表
如果有兩組具有相同數(shù)量的項(xiàng)目——在您的示例中,有三個(gè) 1 和三個(gè) 3——那么這將按照它們?cè)谳斎胫谐霈F(xiàn)的順序?qū)λ鼈冞M(jìn)行排序(因此,這里的輸出是[1, 3, 2, 4]
,因?yàn)?1在輸入中出現(xiàn)在 3 之前)。
這是因?yàn)椋ㄒ?jiàn)備注)的排序行為:GroupBy
IGrouping 對(duì)象的生成順序基于生成每個(gè) IGrouping 的第一個(gè)鍵的源中元素的順序。分組中的元素按照它們?cè)谠创a中出現(xiàn)的順序生成。
并且事實(shí)OrderByDescending
是穩(wěn)定的(同樣,請(qǐng)參見(jiàn)備注),因此如果兩個(gè)項(xiàng)目比較相等,則它們的順序?qū)⒈槐A簦?/p>
此方法執(zhí)行穩(wěn)定排序;也就是說(shuō),如果兩個(gè)元素的鍵值相等,則保留元素的順序。相反,不穩(wěn)定排序不會(huì)保留具有相同鍵的元素的順序。
- 1 回答
- 0 關(guān)注
- 111 瀏覽
添加回答
舉報(bào)