【问题标题】:Extracting key and values in dictionary with in dictionary in C#用C#中的字典提取字典中的键和值
【发布时间】:2013-07-26 20:12:48
【问题描述】:

我有一组如下所示的数据:

Dictionary<string, Dictionary<string,IEnumerable<AGString>>> Data = new Dictionary<string, Dictionary<string,IEnumerable<AGString>>>();

Dictionary<string,IEnumerable<AGString>> stdData = new Dictionary<string,IEnumerable<AGString>>();

稍后我必须提取这些数据并将它们放置在另一个数据结构中,例如我已按如下方式组成数据:

stdData.Add(item.ObjectName,item.Contents); // this creates the inner dictionary
Data.Add(collection,stdData); //This creates the final Data dictionary

我尝试使用 Data.Key、Data.Keys 提取信息,但无法提取数据。有什么线索吗?

【问题讨论】:

  • “无论我做什么都行不通”给我们提供的信息很少。我们不知道您尝试了什么,您期望发生什么,或者实际发生了什么。请看tinyurl.com/so-list
  • 我已经尝试过键值对以字典结构从该字典中提取数据。但是,我没有得到数据。我只是想知道这种情况下的一般方法是什么。
  • 我不知道我会使用嵌套字典的场景。
  • @FabianBigler 这种情况很少发生,但我们的专有技术有一个内部数据结构,有时我们会遇到这种罕见的情况。不幸的是,我是必须处理这个问题的主要人。但是,我找到了一个很好的 Linq 解决方案,我很快就会发布。
  • @FabianBigler。我在 pre-linq 中使用了很多,甚至 post linq Dictionary 可以是一个非常强大的描述

标签: c# dictionary ienumerable


【解决方案1】:

完全不知道你想做什么,但是

给定

Dictionary<string, Dictionary<string,IEnumerable<AGString>>> Data = new Dictionary<string, Dictionary<string,IEnumerable<AGString>>>();

foreach(string k1 in Data.Keys)
{
   foreach(string k2 in Data[k1].Keys)
   {
      foreach(AGString ag in Data[k1][k2])
      {
         // do something with k1, k2 and ag
      }
   }
} 

【讨论】:

    【解决方案2】:

    所以,解决这个问题的优雅方法是使用 Linq,而且您不需要购买元音。 该结构包含内部字典和外部字典。我们可以通过 Linq 访问它们,如下所示:

     var flatKeyValue = from outer in Data
                                   from inner in outer.Value
                                   select new
                                   {
                                       NewKey = outer.Key,
                                       NewVal1 = inner.Key,
                                       NewVal2 = inner.Value
                                   };
    

    所以,现在我们可以通过一个简单的 foreach 循环访问我们心爱的数据:

    foreach (var item in flatKeyValue)
    {
       Console.WriteLine(item.NewKey);  // you can try NewVal1, NewVal2 quite simply here
    }
    

    【讨论】:

    • 好吧,我看过了。我喜欢 Linq,因为它给了我一段更易于理解的代码,远不能确定这是否合格,而且我仍然怀疑对优雅的追求......
    猜你喜欢
    • 1970-01-01
    • 2014-11-17
    • 2019-10-04
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多