c#在Dictionary of Dictionary中查找值

时间:2011-07-12 18:34:16

标签: c# linq 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输出。

3 个答案:

答案 0 :(得分:4)

您可以为用户单独查找:

Dictionary<string, InfoObject> userLookup;

当然,如果你想优化查找速度,那么缺点是你必须在两个必须保持同步的独立数据结构上进行添加和删除。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

每当您在其他字典中插入内容时,您也会在IList字典中插入相同的InfoObject。这样,检索到的InfoObject就是同一个对象。