int[] array = new int[10];
array[0] = 1;
array[1] = 1;
array[2] = 1;
array[3] = 2;
array[4] = 1;
array[5] = 2;
array[6] = 1;
array[7] = 1;
array[8] = 2;
array[9] = 3;
我想得到这个结果:
1 => 6 times
2 => 3 times
3 => 1 times
有没有简单的方法可以在没有if-else statement
的情况下获得此结果?
感谢。
答案 0 :(得分:7)
是的,使用LINQ的GroupBy():
var res = array.GroupBy(x => x)
.Select(x => new {Number=x.Key,Times=x.Count()})
.ToList();
注意:
如果您只想迭代结果一次,则可能不需要ToList()
。
答案 1 :(得分:2)
您可以使用LINQ并对数据进行分组:
var result = array.GroupBy(x => x)
.Select(x => new { Value = x.Key, Count = x.Count() });
答案 2 :(得分:2)
array.GroupBy(a => a).Select(a => new { Value = a.Key, Count = a.Count() });
答案 3 :(得分:1)
您可以使用Linq计算结果。如果您将以下内容放在控制台应用程序中,它应该可以工作:
using System;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
int[] array = new int[10];
array[0] = 1;
array[1] = 1;
array[2] = 1;
array[3] = 2;
array[4] = 1;
array[5] = 2;
array[6] = 1;
array[7] = 1;
array[8] = 2;
array[9] = 3;
var group = from i in array
group i by i into g
select new
{
g.Key,
Sum = g.Count()
};
foreach (var g in group)
{
Console.WriteLine(g.Key + " " + g.Sum);
}
}
}
}
答案 4 :(得分:1)
这是一个允许您构建输出的Linq语句:
array.GroupBy(x => x).Select(x => new { x.Key, Count = x.Count() } );
答案 5 :(得分:1)
Enumerable.GroupBy
按选择器对序列进行分组。然后你可以使用这些组来计算它们或做你需要的任何事情。
var countGroups = array.GroupBy(a => a)
.OrderByDescending(g => g.Count());
foreach(var g in countGroups)
Console.WriteLine("{0} => {1} times", g.Key, g.Count());
以下是您的示例演示:http://ideone.com/WatNL