我有一个字符串数组的名称,或者可以是一个名称列表,它可以有多个重复的名称。我想要做的是获得前5个最重复的名称列表。有人能告诉我这是最好的方法吗?
Array[0] = 'Mike'
Array[1] = 'Tim'
Array[2] = 'Debra'
Array[3] = 'Mike'
Array[4] = 'Steve'
Array[5] = 'Mike'
Array[6] = 'Amy'
Array[7] = 'Tim'
Array[8] = 'Debra'
Array[9] = 'Amy'
输出:迈克有3 蒂姆有2个 黛布拉有2个 史蒂夫有1 艾米有1个
答案 0 :(得分:3)
以下是分组的方法:
var result = from name in namesArray
group name by name into g
orderby g.Count() descending
select new { Name = g.Key, Count = g.Count() };
如果您只需要前5名 - 请致电.Take(5)
:
var result = (from name in namesArray
group name by name into g
orderby g.Count() descending
select new { Name = g.Key, Count = g.Count() }).Take(5);
答案 1 :(得分:1)
最简单的方法是使用GroupBy
。
var result = Array
.GroupBy(x => x)
.Select(x => new { Name = x.Key; Count = x.Count() })
.OrderByDescending(x => x.Count)
.Take(5);
答案 2 :(得分:1)
在我看来,你想要用Linq做点什么,
var results = from name in names
group name by name into nameGroup
let count = nameGroup.Count()
orderby count descending
take 5
select new {Value = name, Count = count};
之后,您可以根据需要格式化results
的内容。