2016-07-23 106 views
3

例如說我有一個集合,像這樣:選擇自IEnumerable <T>到IEnumerable的<Quantity<T>>

Apple 
Banana 
Banana 
Apple 
Apple 
Pear 
Banana 
Grape 
Orange 
Pear 

正如你可以看到,有一些這些項目的倍數。我想要的是一個顯示項目的集合,它是數量。例如,上述數據,似乎是這樣的:

Apple (3) 
Banana (3) 
Pear (2) 
Grape (1) 
Orange (1) 

我創建了一個類...

public class Quantity<T> 
{ 
    public Quantity(T item, int count) 
    { 
     Item = item; 
     Count = count; 
    } 

    public T Item { get; private set; } 
    public int Count { get; private set; } 
} 

我假定它能夠與LINQ使用某種Select完成聲明,將項目從IEnumerable<T>IEnumerable<Quantity<T>> ......這是說,我不是最模糊的如何開始: - | ...有任何想法嗎?

+0

您以'GroupBy' :)開頭:) –

回答

5

如果輸入是string那麼您可以使用以下GroupBy和Select投影。

var result = food.GroupBy(fruit => fruit) 
        .Select(fruit => new Quantity<string>(fruit.Key, fruit.Count())); 
1

您可以使用LINQ提供的GroupBy方法。它通過將特定值相同的項目分組爲單獨的集合起作用。

請看下面的例子:

var fruits = new[] { "Apple", "Apple", "Banana", "Banana" }; 
var quantities = fruits.GroupBy(
    (f) => f, 
    (f) => f, 
    (f, fs) => new Quantity<string>(f, fs.Count()) 
); 

在行動中看到這個例子,請查看以下.NET fiddle

相關問題