在对象C#中查找值的最佳方法

Jam*_*ene 1 c# oop winforms

基本上我有两个XML文件被反序列化为对象.我想要做的是取两个对象并根据匹配的ID合并两个对象的信息.

我能想到这样做的唯一方法是这样的:

foreach(Computer PC in Computers)
{

    foreach(Info data in InfoTable)
    {

        if(PC.ID == data.ID){PC.Info = data.Info;}
    }
}
Run Code Online (Sandbox Code Playgroud)

我有大约10k的记录,所以我无法想象这是最有效的方式.

Mar*_*zek 5

创建映射Info.ID- > Info使用Dictionary<int, Info>:

var map = InfoTable.ToDictionary(data => data.Id);
Run Code Online (Sandbox Code Playgroud)

然后你只需要一个循环:

foreach(Computer PC in Computers)
{
    if(map.ContainsKey(PC.ID))
    {
        PC.Info = map[PC.ID].Info;
    }
}
Run Code Online (Sandbox Code Playgroud)

密钥查找Dictionary<TKey, TValue>O(1)操作.