用适当的父对象填充 ICollection<Class>
Fill ICollection<Class> with proper parent objects
我有一个 class:
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).
经典的方法是使用字典。查找操作(检索给定键的值)可以在 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)
我有一个 class:
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).
经典的方法是使用字典。查找操作(检索给定键的值)可以在 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)