【问题标题】:Fill ICollection<Class> with proper parent objects用适当的父对象填充 ICollection<Class>
【发布时间】:2016-11-23 15:02:41
【问题描述】:

我有一堂课:

public class MyObject {
    int id;
    int parentId;
    MyObject parentObj;
}

我需要用适当的对象填充 parentObj。我需要通过性能和简单性来做到这一点。

所以我有代码:

ICollection<MyObject> Method(ICollection<MyObject> coll)
{
    foreach(var item in coll)
        ...

    return coll;
}

我需要用这个集合中的适当对象填充 parentObj。我认为这个问题的复杂性是 N*log(N)。

【问题讨论】:

    标签: c# algorithm icollection


    【解决方案1】:

    一种经典的方法是使用字典。查找操作(检索给定键的值)可以在 O(1) 中实现。这假设有一个很好的散列函数将键映射到查找数组中的某个位置。

    在 .net 中使用默认的 Dictionary 实现,这将导致此代码。

    ICollection<MyObject> Method(ICollection<MyObject> coll)
    {
        var lookup = new Dictionary<int, MyObject>();
        foreach (var item in coll)
        {
             lookup.Add(item.id, item);
        }
        foreach (var item in coll)
        {
             item.parentObj = lookup[item.parentId];
        }
    
        return coll;
    }
    

    分配lookup会产生内存开销,但运行时(理论上)O(n + n) = O(n)

    【讨论】:

    • 太棒了!谢谢!
    • 前4行可以使用Linq扩展方法ToDictionary进行简化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多