我正在实施设计,其中信息以下列方式组织:
我想把它编码为:
// MasterDB :(0..m)SourceID -- 1..n -> [CaseID, InfoObject]
//
private Dictionary<string, Dictionary<string, InfoObject>> MasterDB;
Class InfoObject
{
string user;
}
这样,添加和删除变得非常容易,因为它们使用SourceID和CaseID作为密钥。
然而查找并不特别。我想查找特定用户(嵌入在InfoObject中)。
我应该如何进行重组,使查找和添加/删除的内容变得不那么有效?
更新:
我尝试了使用LINQ的不同方法
var targetList = from entry in MasterDB
from entrytarget in entry.Value
where (entrytarget.Value.user == username)
select entrytarget.Value;
小问题是返回的列表是IEnumerable列表。不确定我是否可以通过其他方式进行LINQ输出。
答案 0 :(得分:4)
您可以为用户单独查找:
Dictionary<string, InfoObject> userLookup;
当然,如果你想优化查找速度,那么缺点是你必须在两个必须保持同步的独立数据结构上进行添加和删除。
答案 1 :(得分:3)
我建议另外另一个字典,将user
映射到所有相关SourceID
/ CaseID
对的相应集合中。
答案 2 :(得分:0)
我会使用Dictionary<string, IList<InfoObject>
,因为没有什么可以保证用户不能拥有多个SourceID / CaseID对。
每当您在其他字典中插入内容时,您也会在IList字典中插入相同的InfoObject
。这样,检索到的InfoObject
就是同一个对象。