使用linq的两个字典之间的差异
本文关键字:字典 之间 两个 linq 使用 | 更新日期: 2023-09-27 18:20:22
今天早上我一直在和linq玩,有一个关于比较两个字典的问题。我想比较两个骰子并返回差值。我能够通过在foreach循环中减去查询来产生我想要的输出。然而,我想知道是否有一个运算符可以让我更简化这一点。下面我列出了我想简化的代码。
var _ItemsBefore = new SortedDictionary<int, int>() { { 1, 12 }, { 2, 12 } };
var _ItemsAfter = new SortedDictionary<int, int>() { { 1, 11 }, { 2, 8 } { 3, 1 } };
foreach(var item in _ItemsAfter.Except(_ItemsBefore))
{
if(_ItemBefore.ContainsKey(item.Key))
Console.WriteLine(string.format("{0} {1}", item.Key, _ItemsAfter[item.Key] -_ItemsBefore[item.Key]));
else
Console.WriteLine(string.format("{0} {1}", item.Key, item.Value)
}
results
1 -1
2 -4
3 1
根据您的要求,这是一个linq版本,但它不如您的for
循环版本可读:
var result = _ItemsAfter
.Except(_ItemsBefore)
.Select(x => _ItemsBefore.ContainsKey(x.Key) ?
new KeyValuePair<int, int>(x.Key, x.Value - _ItemsBefore[x.Key]) :
new KeyValuePair<int, int>(x.Key, x.Value)).ToList();
您可能需要小心如何存储缺少的项目,如果在没有库存的情况下删除值,则不会打印出库存的减少。但是,如果您正在存储0,那么您应该没有问题。