我希望有一个可以通过T中的属性值进行搜索的集合。在T实例的生命周期中,属性可能会发生很多次变化。搜索的速度很重要 - 线性搜索是不可能的。
我已经成功使用了一个单独的Dictionary实例,但是维护另一个Collection看起来像是一个kluge。我希望有更好的方法。
一种可能性是使用SortedSet类,它可以保持我的对象按属性排序。我可以将SortSet复制到一个数组并使用Array.BinarySearch,但我不能接受每次想要搜索时创建这个数组的开销。也许有一些方法可以在SortedSet上使用BinarySearch?
我承认我已经看到这个问题至少有两次答案,但我无法找到一个明确的替代词典方法。
我正在使用.Net 4.0。
答案 0 :(得分:0)
这样的事情对你有用吗?当然,您可以将基础集更改为列表以外的其他集合,并且我不保证它可以像我编写的那样工作,但我们的想法是不断更新列表。
public class Holder
{
public Action OnPropChange;
int _prop;
public int Prop
{
get
{
return _prop;
}
set
{
_prop = value;
OnPropChange();
}
}
}
public class SortedListThing : List<Holder>
{
public void Add(Holder h)
{
BinarySortedInsert(h);
h.OnPropChange = () => { this.Remove(h); base.Add(h); };
}
private void BinarySortedInsert(Holder h)
{
//do stuff
}
public void Remove(Holder h)
{
h.OnPropChange = null;
base.Remove(h);
}
}