使用适当的父对象

时间:2016-11-23 15:02:41

标签: c# algorithm icollection

我有一个班级:

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)。

1 个答案:

答案 0 :(得分: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)