从Dictionary <string,list <string =“”>&gt; </string,>中检索值

时间:2015-03-26 13:14:42

标签: c# list dictionary

我的字典包含一个包含字符串列表的键。

Dictionary<string, List<string>> keyValueListDict=new Dictionary <string,List<string>>();
List<string>valueList = new List<string>();

我的keyValueListDict充满了唯一键和值列表。对于每个字典条目,我需要输出密钥,然后输出列表的内容(值)。

更新:我认为问题来自输入值 所以我从我的数据库中检索一个对象

foreach(object)
{
  key=object.key;
  foreach(string value in object.othercomponent)
  {
    list.add(value);
  }
  keyValueListDict.add(key,list);
  list.clear();
}

每次清除列表时,列表中值的计数重置为0,这样我就可以填充下一个对象,但我无法弄清楚如何避免这个

5 个答案:

答案 0 :(得分:2)

试试这个:

var valueList = keyValueListDict.SelectMany(kvp => kvp.Value).ToList();

答案 1 :(得分:0)

这是迭代字典的基本方法:

var keyValueListDict = new Dictionary<string, List<string>>() {
    {"fookey", {"foo", "bar", "baz"}},
    {"barkey", {"bar", "baz", "foo"}},
    {"bazkey", {"baz", "foo", "bar"}}
};
foreach(var entry in keyValueListDict) {
    string key = entry.Key;
    List<string> values = entry.Value;
    //Console.WriteLine(key + " => " + values);
    //Console.WriteLine(key + " => [" + string.Join(", ", values) + "]");
}

答案 2 :(得分:0)

尝试这样的方法来创建一个字典输入键的输出字符串,然后是组合值。

public string GetOutputString(KeyValuePair<string, List<string>> kvp)
{
    string separator = ", ";  //you can change this if needed (maybe a newline?)
    string outputString = kvp.Key + " " + String.Join(separator, kvp.Value);
    return outputString;
}

如果您只拥有密钥(而不是整个KeyValuePair),则可以使用类似的内容从字典中创建副本(另请参阅this question关于直接从KeyValuePair获取字典)

var kvp = new KeyValuePair<string, List<string>>(key, keyValueListDict[key]);

如果您需要输出整个字典,可以执行以下操作:

foreach (var kvp in keyValueListDict)
{
    string output = GetOutputString(kvp);
    //print output, write to file etc.
}

Working .NET fiddle

答案 3 :(得分:0)

试试这个:

 foreach (var key in dictionary.Keys)
 {
    var tmp = string.Empty;
    foreach (var value in dictionary[key])
    {
       tmp +=value """";
       System.Console.WriteLine(tmp );
    }
 }

答案 4 :(得分:0)

我今天遇到了这个问题,我不喜欢被迫更改数据结构,我真的很想维护列表。这对我有用。

var reportTabGridItems = ExpectedReportTabsWithReportItems.Where(x => x.Key == reportTabName).Select(x => x.Value).FirstOrDefault();

我只想要一行,因此我将FirstOrDefault()拖到最后,因为最后一次选择将带回列表列表,我只想要一个(如果找不到则为null)。

希望这对您有所帮助。