我需要有一些Collections.Generic.Dictionary项目,我可以通过它的id作为键来获取结构。然后我需要通过另一个字段获取许多结构,比如所有项目的1%或更少。像非唯一索引的游标一样。使用Dictionary我必须浏览所有值并检查哪个值具有该字段的正确值。我的问题是:“我应该使用什么数据结构来支持RDBMS中的这种独特索引和非唯一索引行为?”
谢谢!
br:马蒂
编辑:VS 2005和.NET 2.0
答案 0 :(得分:1)
如果表现很重要,一个选项是维护列表字典。例如,假设你有:
class Employee {
int DeptID; // A non-unique field we want to index on
...
}
然后:
Dictionary<int, LinkedList<Employee>> EmpsByDept;
我在这里使用LinkedList来获得最快的插入/删除性能。您也可以使用List。
答案 1 :(得分:1)
我不相信有一个内置字典像集合接受非唯一TKey值,但您可能对以下项目感兴趣:
答案 2 :(得分:0)
我认为您应该针对不同的需求使用不同的集合。 例如,您可以将此逻辑封装到一个类中,该类包含针对特定需求进行了优化的多个容器:
class Key {}
class Value {}
class MySpecificStorage
{
public void AddSomeEntry(Key key, Value value)
{
dictionary[key] = value;
values.Add(value);
}
public Value FindValueByKey(Key key)
{
//very simple
return dictionary[key];
}
public IEnumerable<Value> GetSomeRange()
{
//use LINQ or something else
//to fetch many structs, say 1% or less of all items, by another field.
//You can even use different Dictionaries for that
return ...;
}
private Dictionary<Key, Value> dictionary = new Dictionary<Key, Value>();
private List<Value> values = new List<Value>(); //or List<KeyValuePair<Key, Value>> values;
}