LINQ - 将List <string>转换为Dictionary <string,string>

jam*_*wis 6 linq tuples todictionary

我正在吃午餐上的Kata,我已经不知所措......

这是我要遵循的步骤:

  • 给定输入字符串,将字符串拆分为新行字符
  • 给定上一步的字符串数组结果,跳过数组中的第一个元素
  • 给定上一步产生的字符串集合,创建一个由每2个元素组成的集合

在最后一个语句中我的意思是,给定4个字符串的集合:

{
    "string1",
    "string2",
    "string3",
    "string4"
}
Run Code Online (Sandbox Code Playgroud)

我应该最终得到这些对的集合('tuples'是正确的术语吗?):

{
    { "string1","string2" },
    { "string3","string4" }
}
Run Code Online (Sandbox Code Playgroud)

我开始查看ToDictionary,然后转移到选择匿名类型,但我不知道如何说"将下两个字符串作为一对返回".

在撰写本文时,我的代码与此类似:

public void myMethod() {

    var splitInputString = input.Split('\n');

    var dic = splitInputString.Skip(1).Select( /* each two elements */ );
}
Run Code Online (Sandbox Code Playgroud)

干杯求救!

詹姆士

Jon*_*eet 4

好吧,你可以使用(未​​经测试):

var dic = splitInputStream.Zip(splitInputStream.Skip(1),
                               (key, value) => new { key, value })
                          .Where((pair, index) => index % 2 == 0)
                          .ToDictionary(pair => pair.key, pair => pair.value);
Run Code Online (Sandbox Code Playgroud)

Zip部分最终将是:

{ "string1", "string2" }
{ "string2", "string3" }
{ "string3", "string4" }
Run Code Online (Sandbox Code Playgroud)

...并且Where使用索引的对将跳过所有其他条目(这将是“具有下一个键的值”)。

当然,如果你真的知道你已经List<string>开始了,你可以通过索引访问这些对,但这很无聊......