C# 从IEnumerable中选择<;T>;到IEnumerable<;数量<;T>&燃气轮机;
比如说,我有一个这样的收藏:C# 从IEnumerable中选择<;T>;到IEnumerable<;数量<;T>&燃气轮机;,c#,linq,C#,Linq,比如说,我有一个这样的收藏: 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,
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; }
}
公共类数量
{
公共数量(T项,整数计数)
{
项目=项目;
计数=计数;
}
公共T项{get;私有集;}
公共整数计数{get;私有集;}
}
我假设可以通过LINQ使用某种类型的
Select
语句,从IEnumerable
投射到IEnumerable
,也就是说,我不知道如何开始:-|…有什么想法吗?如果输入是string
,那么您可以使用下面的GroupBy和Select projection
var result = food.GroupBy(fruit => fruit)
.Select(fruit => new Quantity<string>(fruit.Key, fruit.Count()));
var result=food.GroupBy(水果=>水果)
.Select(水果=>新数量(fruit.Key,fruit.Count());
您可以使用LINQ提供的方法。它的工作原理是将特定值相同的项目分组为不同的集合
请参见以下示例:
var fruits = new[] { "Apple", "Apple", "Banana", "Banana" };
var quantities = fruits.GroupBy(
(f) => f,
(f) => f,
(f, fs) => new Quantity<string>(f, fs.Count())
);
var fruits=new[]{“苹果”、“苹果”、“香蕉”、“香蕉”};
变量数量=水果。分组比(
(f) =>f,
(f) =>f,
(f,fs)=>新数量(f,fs.Count())
);
要查看此示例的实际效果,请查看以下内容。您从
GroupBy
开始: