0

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

我看到了这个:

一种计算列表中出现次数的方法

我有一种预感,这是解决我的问题的方法,但我不太明白。有人可以告诉我这是不是

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

3 回答 3

6

这应该适合你:

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 实际上可以帮助您完成大部分工作。我刚刚发布了这个来帮助展示如何枚举组。

于 2012-09-04T21:19:25.820 回答
1

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

它会是这样的:

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

在网上搜索 101 个 linq 例子,它给了你很多常见的例子。

于 2012-09-04T21:12:55.480 回答
0

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

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

现在,uniqueZips是一个IGrouping<string,string>,其中键是邮政编码,元素的数量是该邮政编码的出现次数。

于 2012-09-04T21:05:08.643 回答