我有一系列邮政编码。如何获取阵列中每个唯一邮政编码的列表,然后计算阵列中唯一邮政编码出现的次数?
我看到了这个:
A method to count occurrences in a list
我有预感这是我的问题的解决方案,但我真的不明白。有人可以告诉我这是不是
答案 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);
现在,uniqueZips
是IGrouping<string,string>
,其中密钥是邮政编码,元素数量是该邮政编码的出现次数。