.NET / C#でコレクションの頻度分布を計算
-
22-09-2019 - |
質問
それ以外のLINQかを使用してネット収集の頻度分布を計算するための高速/簡単な方法はありますか?
たとえば:Anが任意の長さのリストは、多くの繰り返しが含まれています。繰り返しを追跡/リストとカウントを歩くの巧妙な方法は何でしょうか。
解決
、およびそれぞれをインクリメント
は最も簡単な方法は、ハッシュマップを使用して、いずれかのキーと値を使用し、値をインクリメント、またはバケットサイズ( - - 10、バケット2 = 11 20等バケット1 = 1)を選択することです値によってバケットます。
そして、あなたが通過し、周波数を決定することができます。
他のヒント
リスト内の重複する項目を見つけるための最も簡単な方法は、それはこのように、グループになります。
var dups = list.GroupBy(i => i).Where(g => g.Skip(1).Any());
(執筆
Skip(1).Any()
が速く、それは各グループから二つ以上のアイテムを横断する必要はありませんので、(()> 1)をカウントします。list
の列挙が遅い場合を除きしかし、違いはおそらくごくわずかである以上でなければなりません) C5ジェネリックコレクションライブラリには計数により重複を受け入れるHashBag
実装を持っています。次の擬似コードは、あなたが探しているもの、あなたを得るでしょう。
var hash = new HashBag(); hash.AddAll(list); var mults = hash.ItemMultiplicities();その後、リスト項目がキーであり、多重度が値である
K
が含まれますmults
(IDictionary<K,int>
はあなたのリスト内のアイテムの種類がある)
所属していません StackOverflow