有一个数据模型:
public class Item1
{
public long Addr { get; set; }
public long Pos { get; set; }
public string Description { get; set; }
public long Number { get; set; }
}
public class Item2
{
public long Addr { get; set; }
public string Description { get; set; }
public ulong Pointer{ get; set; }
}
创建了 Item1 和 Item2:
var items1 = new Dictionary<ulong, Item1>();
items1.Add(id, new Item1
{
Addr = Addr,
Pos = Pos,
Description = Description,
Number = Number
Pointer = Pointer
});
var items2 = new Dictionary<ulong, Item2>();
items1.Add(id, new Item2
{
Addr = Addr,
Description = Description,
Pointer = Pointer
});
有一个itemPointers列表,其中包含items1中的匹配id和item2中的Pointer
列出 itemPointers = new();
如何创建这样的 itemPointers列表?
我试图玩itemPointers = items1.Select(e =>items2.ContainsKey(e.Pointer)),我知道在 items2.ContainsKey(e.Pointer) 的某个地方应该有 ForEach,但我不明白我在哪里知道我能做到
foreach (var id in items2)
{
if (items1.ContainsKey(items2[id.Key].Pointer))
{
itemPointers.Add(id.Key);
}
}
但似乎有一种更优雅(更快?)的方式来做到这一点。
你的代码几乎是正常的,但如果你愿意,你可以这样做:
通常,在您的代码中,您可以简单地替换
items2[id.Key].Pointer
为id.Value.Pointer
,这将是正常的。重命名
id
为pair
键值对,代码可读性更好。类Item1
,Item2
也可以重命名为更易读的东西。如果出现使用列表或数组无关紧要的情况,请始终选择数组。它更轻量级,使用数组的代码在编译时会比使用列表进行更严重的优化。