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

时间:2012-07-06 12:41:55

标签: linq tuples todictionary

我正在吃午餐上的Kata,我已经不合时宜了......

以下是我要遵循的步骤:

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

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

{
    "string1",
    "string2",
    "string3",
    "string4"
}

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

{
    { "string1","string2" },
    { "string3","string4" }
}

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

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

public void myMethod() {

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

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

欢呼帮助!

詹姆斯

1 个答案:

答案 0 :(得分: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>,那么您可以按索引访问这些对,但那是无聊的。 ..