2017-08-31 18 views
0

我是C#的新手。我列出的一个数组,看起来是这样的:C#统计列表阵列中的项目

var baskets = [ 
[apples, oranges, peaches], 
[oranges, grapes, bananas], 
[oranges, grapes, apples] 
[bananas, strawberries, peaches] 
] 

我需要这样每个水果的计数把它变成一个数组:

var fruitCount = [ 
{fruit: apples , count:2}, 
{fruit: oranges, count: 3}, 
{fruit: peaches, count: 2}, 
{fruit: grapes, count: 2}, 
{fruit: bananas, count: 2}, 
{fruit: strawberries, count: 1}] 

我看着LINQ's.SelectMany“,但它似乎将数组变为一个列表。我真的不知道如何开始。任何人都可以指向我可以帮助的代码示例吗?

+4

首先拼合,然后做'组by' – Rahul

回答

4

试试这个:

var result = baskests.SelectMany(x => x) 
    .GroupBy(x => x) 
    .Select(x => new { 
     Fruit = x.Key, 
     Count = x.Count() 
    }); 

这不正是拉胡尔在评论建议。它首先将所有的水果变成一个单一的列表,其中包含重复列表和组列表。最后,Select -statement将为每个具有FruitCount属性的组创建一个匿名实例。

+0

@RenéVogt那么,作为OP仅发布一些psueod码我以为他水果的财产 - 显然没有。 – HimBromBeere

1

您需要SelectMany扁平化数组,然后组的条目:

var flattened = baskets.SelectMany(basket => basket); 
var fruitCount = flattened.GroupBy(fruit => fruit, 
            (fruit, g) => new { fruit, count = g.Count()});