[英]Iterating through nested dictionary is not working in C#
我正在尝试从嵌套字典中打印结果
var variations_hash = new Dictionary<string, Dictionary<string, List<string>>>();
但这会引发一些随机错误
using System;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
class Program
{
static void Main()
{
var variations_hash = new Dictionary<string, Dictionary<string, List<string>>>();
var variations = new Dictionary<string, List<string>>();
variations["available"] = new List<string> { "hi" };
var stores = new[] { "s", "m", "xl", "xxl", "xxxl", "v" };
string color_trans = "blue";
foreach (var sto in stores)
{
variations_hash[sto] = variations;
}
foreach(var job in variations_hash.Key())
{
foreach (var innerDict in variations_hash[key].Select(k => k.Value))
{
Console.Write(innerDict);
}
}
Console.ReadLine();
}
}
错误:
错误CS1061“字典>>”不包含“键”的定义,找不到可以接受类型为“字典>>”类型的第一个参数的扩展方法“键”(您是否缺少using指令或程序集引用?)
ConsoleApplication1 c:\\ users \\ administrator \\ documents \\ Visual Studio 2015 \\ Projects \\ ConsoleApplication1 \\ ConsoleApplication1 \\ Program.cs 29错误CS0103在当前上下文中不存在名称“键” ConsoleApplication1 c:\\ users \\ administrator \\ documents \\ visual studio 2015 \\ Projects \\ ConsoleApplication1 \\ ConsoleApplication1 \\ Program.cs 31
警告CS0219已分配变量'color_trans',但从未使用过其值
ConsoleApplication1 c:\\ users \\ administrator \\ documents \\ Visual Studio 2015 \\ Projects \\ ConsoleApplication1 \\ ConsoleApplication1 \\ Program.cs 20
如何循环和打印嵌套字典的所有内容?
尽管您可以通过用Keys
属性替换Key()
来解决问题,但这并不是迭代字典的最佳方法,因为您必须为循环中的每个键检索对象。
迭代键-值对更为有效,如下所示:
foreach(var vHash in variations_hash) {
Console.WriteLine("variations_hash key = {0}", vHash.Key);
foreach (var inner in vHash.Value) {
// Print inner dictionary key followed by comma-separated list
Console.WriteLine(
"--- {0}: {1}"
, inner.Key
, string.Join(", ", inner.Value)
);
}
}
请注意,每个循环如何使您不仅可以访问要迭代的字典的键(即vHash.Key
和inner.Key
),还可以访问与该键关联的值。
应该是variations_hash.Keys
另外,嵌套的字典值是List
,因此请使用SelectMany
展平结构。
foreach(var job in variations_hash.Keys)
{
foreach (var innerDict in variations_hash[key].SelectMany(k => k.Value))
{
Console.Write(innerDict);
}
}
上面的代码可能会解决您的编译问题并打印所有嵌套的字典值,但是要以正确的格式打印嵌套的字典,可以使用以下代码。
foreach(var kv in variations_hash)
{
foreach (var nestedKv in kv.Values)
{
Console.Write("Key {0}- Values{1}", nestedKv.Key, string.Join(",", nestedKv.Value));
}
}
和使用Linq
var lines = variations_hash.SelectMany(x=>x.Values)
.ToList().
.ForEach(kv => Console.WriteLine("Key {0}- Values{1}", kv.Key, string.Join(",", kv.Value)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.