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

时间:2014-11-02 05:31:17

标签: 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的记录,所以我无法想象这是最有效的方式。

2 个答案:

答案 0 :(得分:5)

创建映射Info.ID - &gt; Info使用Dictionary<int, Info>

var map = InfoTable.ToDictionary(data => data.Id);

然后你只需要一个循环:

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

Dictionary<TKey, TValue>中的键查找是 O(1)操作。

答案 1 :(得分:0)

你可以使用linq

model pc =(from cm in Computers
        join it in InfoTable on
        cm.ID equal it.ID
        select new model
        {
        info=it.info
        });

其中model与计算机或您的最终数据是同一类