【问题标题】:Best way to find a value in an object C#在对象 C# 中查找值的最佳方法
【发布时间】:2014-12-29 01:18:20
【问题描述】:

基本上我有两个正在反序列化为对象的 XML 文件。 我想要做的是获取这两个对象并根据匹配的 ID 合并来自它们的信息。

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

foreach(Computer PC in Computers)
{

    foreach(Info data in InfoTable)
    {

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

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

【问题讨论】:

    标签: c# winforms oop


    【解决方案1】:

    使用Dictionary<int, Info> 创建一个映射Info.ID -> 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) 操作。

    【讨论】:

      【解决方案2】:

      你可以使用 linq

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

      其中模型与计算机或您的最终数据属于同一类

      【讨论】:

        猜你喜欢
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        • 2017-03-11
        • 1970-01-01
        • 2018-06-27
        相关资源
        最近更新 更多