1

リスト内の重複を見つけて、出現回数で並べ替える簡単な方法はありますか? また、重複は削除する必要があります。

例えば。あなたはList<String>このようなものを持っています:

List<String> = new List<String>{"6","1","2","2","4","6","5","1","6","6","2"};

問題は、このリストを「6」、「1」、「2」、「4」、「5」に変換する方法です。

4

6 に答える 6

2

あなたが実際にそれらを最も一般的なものから最も少ないものへと並べたい場合-あなたの例とは異なり-

var ordered = list
    .GroupBy(i => i)
    .OrderByDescending(g => g.Count())
    .Select(g => g.Key);

これを達成する必要があります。

于 2012-09-11T14:34:15.567 に答える
2

最も簡単な方法は、LINQ メソッドを使用することだと思いますDistinct()

var originalList = …;
vat withoutDuplicates = originalList.Distinct();

Distinct()ただし、結果の順序は明示的に文書化されていないことに注意してください。

于 2012-09-11T14:28:22.697 に答える
2

使用するLinq.Distinct()

List<String> list = new List<String>{"6","1","2","2","4","6","5","1","6","6","2"};
list = list.Distinct().ToList();
于 2012-09-11T14:29:46.910 に答える
0

あなたが何を意味するのか正確には不明であるため、考えられる2つの意味の解決策を次に示します。

  1. 出現回数順に並べられた一意のリストを取得します

    リストをグループ化し、次で並べ替えますCount()

    List<String> list = new List<String>{"6","1","2","2","4","6","5","1","6","6","2"};
    
    var q = from s in list
    group s by s into g
    orderby g.Count() descending
    select g.Key;
    
  2. リスト内のアイテムの最初の出現によって順序付けられた一意のリストを取得します

    を使用するためのいくつかの提案が既にありますがDistinctドキュメントでは、それらがリストに表示される順序で表示されることを保証していません (現在のEnumerable実装ではたまたまそのように順序付けられていますが、他のプロバイダーの場合は保証されていません)。

    備考
    結果のシーケンスは順不同です。

    順序を保証するには、OrderBy 句を追加します。

    var q = list.Distinct().OrderBy(s => list.IndexOf(s));
    
于 2012-09-11T14:36:40.610 に答える
0

まだきれいではありませんが、これで正しい結果が得られます。

var originalData = new List<string>{"6","1","2","2","4","6","5","1","6","6","2"};
var result = new List<string>();

foreach (var myString in originalData)
{
    if (!result.Exists(s => s == myString))
        result.Add(myString);
}
于 2012-09-11T14:50:19.170 に答える
0
Using System.Linq;
// Assuming inputList was the original string list
List<String> deDuped = inputList.Distinct().ToList();
于 2012-09-11T14:31:40.950 に答える