计算一个集合的频率分布与.net / C#
-
22-09-2019 - |
题
是否有快/简单的方法来计算使用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>
其中列表项目是关键和峰多重是值。
不隶属于 StackOverflow