簡體   English   中英

簡化C#中的嵌套循環

[英]simplify nested for loop in c#

我需要簡化嵌套的for循環的幫助,還是已經成為最佳方法而又不增加更多復雜性

var multiParamValues = new Dictionary<string, string[]>();
multiParamValues.Add("ParamA", new string[] {"1", "2"});
multiParamValues.Add("ParamB", new string[] {"55", "56"});

var nameOfParameter = multiParamValues.ToList();
var numberOfParameters = nameOfParameter[0].Value.Length;

for (var k = 0; k < numberOfParameters; k++)
{
    for (var i = 0; i < multiParamValues.Count; i++)
    {
        Console.WriteLine("{0}, {1}", nameOfParameter[i].Key, nameOfParameter[i].Value[k]);
    }
}

預期成績:

ParamA, 1
ParamB, 55
ParamA, 2
ParamB, 56

我認為這沒什么大不了的,但是您不必將Dictionary轉換為List。

var multiParamValues = new Dictionary<string, string[]>();
multiParamValues.Add("ParamA", new string[] { "1", "2" });
multiParamValues.Add("ParamB", new string[] { "55", "56" });

var numberOfParameters = multiParamValues.First().Value.Length;

for (var k = 0; k < numberOfParameters; k++)
{
    foreach (var item in multiParamValues)
    {
        Console.WriteLine("{0}, {1}", item.Key, item.Value[k]);
    }
}

請注意,C#規范不保證Dictionary中元素的順序。

您可以進行一些改進。 首先,您可以以更緊湊的方式初始化字典

var multiParamValues = new Dictionary<string, string[]>
{
    {"ParamA", new[] {"1", "2"}},
    {"ParamB", new[] {"55", "56"}}
};

要么

var multiParamValues1 = new Dictionary<string, string[]>
{
    ["ParamA"] = new[] {"1", "2"},
    ["ParamB"] = new[] {"55", "56"}
};

其次,您可以通過使用foreach而不是for循環來消除對索引的使用:

foreach (var multiParamValue in multiParamValues)
{
    foreach (var value in multiParamValue.Value)
    {
        Console.WriteLine("{0}, {1}", multiParamValue.Key, value);
    }
}

最后,您可以使用字符串插值來簡化輸出字符串:

Console.WriteLine($"{key}, {value}");

因此,最終代碼可能如下所示:

var multiParamValues = new Dictionary<string, string[]>
{
    {"ParamA", new[] {"1", "2"}},
    {"ParamB", new[] {"55", "56"}}
};

foreach (var paramValue in multiParamValues)
{
    foreach (var value in paramValue.Value)
    {
        Console.WriteLine($"{paramValue.Key}, {value}");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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