リスト内の重複を見つけて、出現回数で並べ替える簡単な方法はありますか? また、重複は削除する必要があります。
例えば。あなたはList<String>
このようなものを持っています:
List<String> = new List<String>{"6","1","2","2","4","6","5","1","6","6","2"};
問題は、このリストを「6」、「1」、「2」、「4」、「5」に変換する方法です。
あなたが実際にそれらを最も一般的なものから最も少ないものへと並べたい場合-あなたの例とは異なり-
var ordered = list
.GroupBy(i => i)
.OrderByDescending(g => g.Count())
.Select(g => g.Key);
これを達成する必要があります。
最も簡単な方法は、LINQ メソッドを使用することだと思いますDistinct()
。
var originalList = …;
vat withoutDuplicates = originalList.Distinct();
Distinct()
ただし、結果の順序は明示的に文書化されていないことに注意してください。
使用するLinq.Distinct()
List<String> list = new List<String>{"6","1","2","2","4","6","5","1","6","6","2"};
list = list.Distinct().ToList();
あなたが何を意味するのか正確には不明であるため、考えられる2つの意味の解決策を次に示します。
出現回数順に並べられた一意のリストを取得します。
リストをグループ化し、次で並べ替えます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;
リスト内のアイテムの最初の出現によって順序付けられた一意のリストを取得します
を使用するためのいくつかの提案が既にありますがDistinct
、ドキュメントでは、それらがリストに表示される順序で表示されることを保証していません (現在のEnumerable
実装ではたまたまそのように順序付けられていますが、他のプロバイダーの場合は保証されていません)。
備考
結果のシーケンスは順不同です。
順序を保証するには、OrderBy 句を追加します。
var q = list.Distinct().OrderBy(s => list.IndexOf(s));
まだきれいではありませんが、これで正しい結果が得られます。
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);
}
Using System.Linq;
// Assuming inputList was the original string list
List<String> deDuped = inputList.Distinct().ToList();