在字典的字典中查找值
本文关键字:字典 查找 | 更新日期: 2023-09-27 18:01:48
我正在执行设计,其中信息以以下方式组织:
- 多个来源将为我们提供多个案例信息。
- 每个源由SourceID字符串标识,每个案例由CaseID字符串标识。
- 信息包将封装为InfoObject。
我想把它编码为:
// 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列表。
您可以为用户单独查找:
Dictionary<string, InfoObject> userLookup;
这当然只有当你想优化查找速度时,缺点是你现在必须在两个独立的数据结构上进行添加和删除,这些数据结构必须保持同步。
我建议额外维护另一个字典,将user
映射到所有相关SourceID
/CaseID
对的适当集合中。
我会使用Dictionary<string, IList<InfoObject>
,因为没有什么可以保证用户不能有多个SourceID/CaseID对。
当你在另一个字典中插入内容时,你也要在IList的字典中插入相同的InfoObject
。这样,检索到的InfoObject
是相同的对象。