在字典中合并键和值 - LINQ
本文关键字:LINQ 键和值 合并 字典 | 更新日期: 2023-09-27 18:32:08
>我有如下定义的类:
public class CoinRepository
{
private Dictionary<Coin, int> repository;
public CoinRepository()
{
repository = new Dictionary<Coin, int>();
}
public void Add(List<Coin> coins)
{
foreach (var coin in coins)
{
repository[coin] = repository.ContainsKey(coin) ? repository[coin] + 1 : 1;
}
}
}
public class Coin
{
public int CoinValue { get; set; }
//Has equals, hascode etc implemented. Omitted here for brevity.
}
我的 add 方法将被多次调用,我希望通过 LINQ 查询缩短 foreach 循环。
基本上,我需要做的是按硬币值对所有硬币进行分组,然后添加到存储库中。但是,在这样做的同时,我需要与已经存在的那些合并。如何使用 LINQ 实现此目的?
例如:假设我在存储库中有 2 个价值为 1 和 2 的硬币,并且我收到另一个按值 1、2 和 3 添加硬币的请求,那么我的存储库现在将有 3 种类型的硬币。价值 1 的硬币与计数 2,价值 2 的硬币与计数 2,价值为 3 的硬币与计数 1。
谢谢-话筒
使用 .NET 3.5
这假设您有一组硬币要处理。
看起来您正在尝试构建硬币与硬币频率的字典,对吧?在这种情况下,解决方案可以在一行中陈述。
var dict = coins.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
相反,如果您希望创建硬币与总硬币价值的字典:
var dict = coins.GroupBy(c => c)
.ToDictionary(g => g.Key, g => g.Sum(c => c.CoinValue));
使用 LINQ 无法实现此目的。LINQ 用于查询数据结构,而不是修改它们。
LINQ
不是执行副作用的有效工具,它是一个查询工具。 由于您尝试通过合并第二个集合来修改现有集合,因此它不是适合该作业的工具。
您的foreach
循环已经非常有效,并且可能与使用 LINQ 时的任何循环一样快(或更快)。