如何计算数组中每个唯一元素的出现次数?

时间:2012-09-04 21:03:15

标签: c# arrays visual-studio-2010

我有一系列邮政编码。如何获取阵列中每个唯一邮政编码的列表,然后计算阵列中唯一邮政编码出现的次数?

我看到了这个:

A method to count occurrences in a list

我有预感这是我的问题的解决方案,但我真的不明白。有人可以告诉我这是不是

  1. 确实是最好的方法。
  2. 告诉我如何将数组放入List中以便我可以利用GroupBy?

3 个答案:

答案 0 :(得分:5)

这应该适合你:

var zips = new string[] { "12345", "12345", "54321" };
var groups = zips.GroupBy(z => z);

foreach(var group in groups)
    Console.WriteLine("{0} -> {1}", group.Key, group.Count());

应该给你:

12345 -> 2
54321 -> 1

driis实际上可以让你在那里大部分时间。我刚发布了这篇文章,以帮助展示如何枚举这些组。

答案 1 :(得分:1)

您应该使用Where仅选择count == 1的条目,并使用Select列出值,然后使用ToList()返回List。

这将是这样的:

List<string> uniqueZips = zips.GroupBy(z=>z).Where(z => z.Count() == 1).Select(z => z.Key).ToList();

在互联网上搜索101个linq示例,它为您提供了许多常见示例。

答案 2 :(得分:0)

GroupBy适用于IEnumerable<T>,因此也适用于数组(数组实现IEnumerable)。 GroupBy根据键对对象进行分组。这里的关键是邮政编码本身;所以你可以传入一个映射到那个的委托:

var zips  = new string []{"8000", "9000"}
var uniqueZips = zips.GroupBy(x => x);

现在,uniqueZipsIGrouping<string,string>,其中密钥是邮政编码,元素数量是该邮政编码的出现次数。