2

有没有一种快速/简单的方法来使用 Linq 或其他方式计算 .Net 集合的频率分布?

例如:一个任意长的 List 包含许多重复。遍历列表和计数/跟踪重复的聪明方法是什么?

4

3 回答 3

5

在列表中查找重复项的最简单方法是将其分组,如下所示:

var dups = list.GroupBy(i => i).Where(g => g.Skip(1).Any());

(写入Skip(1).Any()应该比 (Count() > 1) 快,因为它不必遍历每个组中的两个以上的项目。但是,除非list' 的枚举器很慢,否则差异可能可以忽略不计)

于 2009-10-21T01:34:27.703 回答
2

最简单的方法是使用 hashmap 并使用 value 作为 key 并增加 value,或者选择一个桶大小(桶 1 = 1 - 10,桶 2 = 11 - 20 等),然后将每个桶递增价值。

然后你可以通过并确定频率。

于 2009-10-21T01:36:39.650 回答
1

C5 通用集合库有一个HashBag通过计数接受重复项的实现。以下伪代码将为您提供所需的内容:

var hash = new HashBag();
hash.AddAll(list);
var mults = hash.ItemMultiplicities();

K列表中项目的类型在哪里)mults然后将包含一个IDictionary<K,int>列表项是键,多重性是值。

于 2009-11-05T18:16:57.707 回答