如何计算数组中的重复项

时间:2014-03-21 17:25:28

标签: c# c#-4.0 c#-3.0

我有一个字符串数组的名称,或者可以是一个名称列表,它可以有多个重复的名称。我想要做的是获得前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个

3 个答案:

答案 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的内容。