亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我想按值的頻率對列表進行排序并區分它 c#

我想按值的頻率對列表進行排序并區分它 c#

C#
慕桂英3389331 2022-11-22 15:32:45
例如,我有一個整數列表List<int> Lst = {1,1,1,2,2,3,3,3,4,4}我希望這個列表是Lst = {1,3,2,4}(按值的頻率和不同排序,所以 1 是第一個,之后是 3,之后是 2,然后是 4 感謝您的幫助:D我正在做一個項目,我有一個這樣的列表,我需要重新排列它我還沒有嘗試讓它與代碼一起工作,因為我想不出讓它工作的方法我希望函數的輸出是一個像 {1,3,2,4} 這樣排列的列表 謝謝 :D
查看完整描述

1 回答

?
慕村9548890

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是穩定的(同樣,請參見備注),因此如果兩個項目比較相等,則它們的順序將被保留)。

此方法執行穩定排序;也就是說,如果兩個元素的鍵值相等,則保留元素的順序。相反,不穩定排序不會保留具有相同鍵的元素的順序。


查看完整回答
反對 回復 2022-11-22
  • 1 回答
  • 0 關注
  • 113 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號