是否有快/简单的方法来计算使用LINQ或以其它方式的.Net收集的频率分布?

例如:任意长的列表包含多次重复。什么是走在列表和计数/跟踪重复一个聪明的办法?

有帮助吗?

解决方案

的最简单的方法是使用一个散列映射,要么使用该值作为密钥,并递增值,或选择一个桶大小(桶1 = 1 - 10,斗2 = 11 - 20等),并递增每由值桶。

然后,可以经过,并确定频率。

其他提示

找到列表中的重复项目最简单的方法是将IT组这样的:

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

(编写Skip(1).Any()应该比快(COUNT()> 1),因为它不会有跨越不止来自每个组的两个项目。然而,该差异可能是可以忽略不计,除非list的枚举是慢)

C5通用集合库具有通过计数接受重复一个HashBag实现。下面的伪代码会得到你,你找什么:

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

(其中K是在列表中的项目的类型)mults然后将包含IDictionary<K,int>其中列表项目是关键和峰多重是值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top