繁体   English   中英

c# 在字典字典中查找值

[英]c# Lookup for a value in Dictionary of Dictionary

我正在实施设计,其中信息按以下方式组织:

  • 多个来源将为我们提供多个案例信息。
  • 每个源由 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 列表。 不确定我是否可以通过其他方式制作 LINQ output。

您可以单独查找用户:

Dictionary<string, InfoObject> userLookup;

当然,这只有在您想优化查找速度时,缺点是您现在必须对两个必须保持同步的独立数据结构进行添加和删除。

我建议另外维护另一个字典,将user映射到所有相关SourceID / CaseID对的适当集合中。

我会使用Dictionary<string, IList<InfoObject>因为没有什么能保证用户不能拥有多个 SourceID/CaseID 对。

每当您在其他字典中插入某些内容时,您也会在 IList 的该字典中插入相同的InfoObject 这样检索到的InfoObject与 object 相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM