在字典的字典中查找值

本文关键字:字典 查找 | 更新日期: 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列表。

在字典的字典中查找值

不确定是否可以使LINQ以其他方式输出。

您可以为用户单独查找:

Dictionary<string, InfoObject> userLookup;

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

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

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

当你在另一个字典中插入内容时,你也要在IList的字典中插入相同的InfoObject。这样,检索到的InfoObject是相同的对象。