【问题标题】:How to get the TValue List<> of Dictionary<>如何获取 Dictionary<> 的 TValue List<>
【发布时间】:2017-05-23 07:12:23
【问题描述】:

我有一个Dictionary&lt;&gt;,设置如下:

Dictionary<int, List<string>> srt = new Dictionary<int, List<string>>();

我想访问List&lt;string&gt; 中的特定字符串(即Dictionary&lt;&gt; 中的TValue ).

例如 -> 给定:Dictionary&lt;1, {"string1", "string2", "string3"}&gt;,我怎样才能访问“string2”,并且只能访问“string2”。

我希望问题足够清楚,可以理解。如果不是,请告诉我我需要澄清什么。 谢谢!

【问题讨论】:

  • 不是真的...“访问 string2”是什么意思?您可以使用srt[1][1] 来获取"string2" 作为一个值,但我不知道这是否是您想要实现的目标,或者您是否知道其中的任何一个值(第一个是字典键,第二个是列表中的索引)
  • 您必须搜索所有集合才能找到“string2”。也许您应该考虑重新设计您的数据结构以实现更高的性能和直接访问。
  • 是否有任何逻辑,您希望根据该逻辑访问字典中第一个键值对的第二个列表项?

标签: c# string list dictionary


【解决方案1】:

这是你想要的吗?

 Dictionary<int, List<string>> dict = new Dictionary<int, List<string>>();
 dict .Add(1, new List<string> { "Hello", "World" });

 string result = fileList[1][1]; //Will output "World"

【讨论】:

  • 所以我想我缺少的是 dict[1] 折叠到 List&lt;string&gt;,这反过来让我添加另一个 [1] 作为列表的索引。
【解决方案2】:

试试这个:

var res = srt[1][0]; //"string1"

第一个索引是键,第二个索引引用列表元素

【讨论】:

    【解决方案3】:

    你可以用这个

     var concreteValue = str.Values.SelectMany(l => l.Where(v => v.Equals("string2")))
                                   .FirstOrDefault();
    

    【讨论】:

    • 这会访问key为1的item,OP已经举例说明了。
    • 这仍然是不必要的,它会遍历每个字典项和每个列表。 string string2 = str[1][1]
    • 是的,我知道,但我认为 OP 想要在不知道确切键值的情况下检索值
    【解决方案4】:

    其实很简单。按键访问特定列表,然后您可以将其视为一个数组。语法为 srt[key][index]

    这意味着访问 string2 你需要写成 var b = srt[1][1]; 这里 b 将有 string2

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 2016-06-14
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      相关资源
      最近更新 更多