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

6
我正在午餐时间做一个Kata,但遇到了困难...
以下是我尝试遵循的步骤:
  • 给定一个输入字符串,通过换行符将该字符串分割成多个子字符串
  • 给定前一步骤的结果字符串数组,跳过数组中的第一个元素
  • 给定前一步骤的字符串集合,创建一个包含每两个元素的新的集合
在上述最后一条语句中,我的意思是,给定这4个字符串的集合:
{
    "string1",
    "string2",
    "string3",
    "string4"
}

我应该最终得到这个键值对的集合(“元组”是否是正确的术语?):
{
    { "string1","string2" },
    { "string3","string4" }
}

我开始研究ToDictionary,然后转向选择匿名类型,但我不确定该如何说“返回下两个字符串作为一对”。

目前,我的代码看起来类似于以下内容:

public void myMethod() {

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

    var dic = splitInputString.Skip(1).Select( /* each two elements */ );
}

感谢您的帮助!
詹姆斯
1个回答

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);

“Zip”部分最终将包含以下内容:
{ "string1", "string2" }
{ "string2", "string3" }
{ "string3", "string4" }

使用索引读取 Where 对时会跳过每个其他的条目(下一个键的“值”)。

当然,如果你确实知道你有一个 List<string>,你可以通过索引访问这些对,但那很无聊...


正是我所需要的!我之前不知道Zip - 谢谢你告诉我。 - james lewis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接