代码之家  ›  专栏  ›  技术社区  ›  Paul Sasik

使用计算集合的频率分布。净额/C#

  •  2
  • Paul Sasik  · 技术社区  · 16 年前

    是否有一种快速/简单的方法来计算a的频率分布。使用Linq还是其他方式进行网络收集?

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

    3 回复  |  直到 16 年前
        1
  •  2
  •   James Black    16 年前

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

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

    (写作 Skip(1).Any() 应该比(Count()>1)因为它不必遍历每组中的两个以上项目。然而,除非 list

        2
  •  5
  •   SLaks    16 年前

    最简单的方法是使用哈希映射,将值用作键并递增值,或者选择一个bucket大小(bucket 1=1-10,bucket 2=11-20等),并按值递增每个bucket。

    然后你可以浏览并确定频率。

        3
  •  1
  •   Marcus Griep    16 年前

    C5 generic collections library 有一个 HashBag 通过计数接受重复项的实现。以下伪代码将为您找到所需内容:

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

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

    推荐文章