我使用LINQ遇到了以下问题。假设我有一组数字,范围从1到5:[1,2,4,5,0,3,1 ...]
。该阵列中可能有任意数量的那些。我想要的是将该数组转换为以下结构:[{number:0, count:5},{number:1, count:3}, {number:2, count:0}....]
。如果我使用GroupBy
,我会错过第2号的条目。使用LINQ是否有任何优雅有效的方法?
答案 0 :(得分:2)
您需要先在集合和包含数字0到5的“固定”集合之间执行外部联接。然后将其分组并进行计数。
答案 1 :(得分:0)
var arrayOfNumbers = new int[] {1, 5, 4, 5, 1, 0, 2, 3, 4, 5, 1,1,1};
var result =
from n in arrayOfNumbers
group n by n into g
select new { Number = g.Key, Count = g.Count() };
foreach (var item in result)
{
Console.WriteLine(String.Format("Number {0}: count {1}", item.Number, item.Count));
}
答案 2 :(得分:0)
List<KeyValuePair<string, int>> pairs = new List<KeyValuePair<string,int>>();
for(int i = 0; i < 5; i++)
{
pairs.Add(new KeyValuePair<string, int>("number:" + i, arrayOfNums.Select(x => x == i).Count()));
}
arrayOfNums
是0到5之间的值数组。
结果以您希望的格式存储在List<KeyValuePair>>
中。
您可以改进这一点,而不是在循环中使用硬编码的5
,您可以使用查找数组中的最高值。