【问题标题】:C# string to Dictionary<string, List<string>> with LINQ [closed]C# 字符串到 Dictionary<string, List<string>> 与 LINQ [关闭]
【发布时间】:2013-08-28 02:11:13
【问题描述】:

假设我有一个这样的字符串:

string test = "A1:B1:C1, A2:B2:C2, A3:B3:C3"

如何使用 LINQ 将其拆分并存储在 Dictionary&lt;string, List&lt;string&gt;&gt;

如下:

密钥:A1 (string)
值:B1 和 C1 (List&lt;string&gt;)

密钥:A2 (string)
值:B2 和 C2 (List&lt;string&gt;)

密钥:A3 (string)
值:B3 和 C3 (List&lt;string&gt;)


谢谢大家。

【问题讨论】:

  • 向我们展示您的尝试,并说明您的解决方案有什么问题(错误、意外结果等)。如果它不起作用或什至没有编译,我们希望您表现出一些的努力。
  • 好吧,我不能说 linq,但它在一个简单的 forloop 中很容易......

标签: c# string linq dictionary


【解决方案1】:
(from entry in test.Split(',')
 from item in entry.Split(':')
 select item).ToDictionary(i => i[0], i => new string[] { i[1], i[2] }.ToList());

(未经测试)

【讨论】:

  • Boogart Linq 看起来很酷,声明式编程... :) +1
  • 如果最终项目少于或多于两个怎么办?
  • @It'sNotALie:这个问题表明总是有 2 个项目,这就是我所要做的。否则,可以使用i.Skip(1).ToList()
  • @KentBoogaart 安全总比抱歉 ;)
【解决方案2】:
var dict = test.Split(',')
               .Select(x=>x.Trim().Split(':'))
               .ToDictionary(k=>k[0],v=>new List<string>(){v[1],v[2]});

【讨论】:

  • 如果最终项目少于或多于两个怎么办?
【解决方案3】:

这也处理多于或少于 3 个项目。

test.Split(',').Select(s => s.Split(':'))
    .ToDictionary(e => e.FirstOrDefault(), e => e.Skip(1).ToList());

【讨论】:

    猜你喜欢
    • 2019-11-27
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多