簡體   English   中英

在嵌套字典中進行迭代在C#中不起作用

[英]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.Keyinner.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM