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

C# 在对象C中查找值的最佳方法#,c#,winforms,oop,C#,Winforms,Oop,基本上,我有两个被反序列化为对象的XML文件。 我要做的是获取这两个对象,并根据匹配的ID合并这两个对象的信息 我能想到的唯一方法是: foreach(Computer PC in Computers) { foreach(Info data in InfoTable) { if(PC.ID == data.ID){PC.Info = data.Info;} } } 我有大约10k条记录,因此我无法想象这是最有效的方法。使用字典创建映射Info.ID

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

我能想到的唯一方法是:

foreach(Computer PC in Computers)
{

    foreach(Info data in InfoTable)
    {

        if(PC.ID == data.ID){PC.Info = data.Info;}
    }
}

我有大约10k条记录,因此我无法想象这是最有效的方法。

使用
字典创建映射
Info.ID
->
Info

然后只需要一个循环:

foreach(Computer PC in Computers)
{
    if(map.ContainsKey(PC.ID))
    {
        PC.Info = map[PC.ID].Info;
    }
}

Dictionary
中的键查找是O(1)操作。

使用
Dictionary
创建映射
Info.ID
->
Info

然后只需要一个循环:

foreach(Computer PC in Computers)
{
    if(map.ContainsKey(PC.ID))
    {
        PC.Info = map[PC.ID].Info;
    }
}
字典中的键查找是O(1)操作。

您可以使用linq

model pc =(from cm in Computers
        join it in InfoTable on
        cm.ID equal it.ID
        select new model
        {
        info=it.info
        });
如果模型与计算机或最终数据相同,则可以使用linq

model pc =(from cm in Computers
        join it in InfoTable on
        cm.ID equal it.ID
        select new model
        {
        info=it.info
        });
其中模型与计算机或最终数据是同一类