【问题标题】:Convert List<string> containing many-to-many relationship items into one-to-many relationship将包含多对多关系项的 List<string> 转换为一对多关系
【发布时间】:2020-05-08 05:10:33
【问题描述】:

我有一个包含由“”分隔的字符串的列表,该列表用作多对多关系的列表:

Category1 Item1
Category1 Item2
Category1 Item3
Category2 Item1 
Category2 Item2 
Category2 Item3
Category2 Item4
Category2 Item5
Category3 Item1 

我需要将此列表转换为具有一对多关系顺序的列表,其中项目用“;”分隔示例:

Category1 Item1;Item2;Item3
Category2 Item1;Item2;Item3;Item4;Item5
Category3 Item1

我现在有多个 foreach 循环。我很乐意与您分享我尝试过的许多方法,但这确实是一团糟。但是,有些事情告诉我可能有一种 Lambda 技术来实现这一点。谁能指出我正确的方向?谢谢

【问题讨论】:

  • 您是否希望结果列表仍然是字符串列表?
  • 是的,先生,正是这样。

标签: c# list lambda many-to-many one-to-many


【解决方案1】:
var items = new List<string> {
   "Category1 Item1",
   "Category1 Item2",
   "Category1 Item3",
   "Category2 Item1",
   "Category2 Item2",
   "Category2 Item3",
   "Category2 Item4",
   "Category2 Item5",
   "Category3 Item1"
};

var result = items.Select(x => x.Split(' '))
                  .Select(x => new {
                     Category = x[0],
                     Item = x[1]
                  })
                  .GroupBy(x => x.Category, y => y.Item, (k, e) => string.Join(";", e))
                  .ToList();

Console.ReadLine();

【讨论】:

  • 谢谢你,我得到了一些错误:(k, e) => string.Join(';', e) 错误 CS0136 不能在此声明名为 'e' 的本地或参数范围,因为该名称在封闭的本地范围中用于定义本地或参数错误 CS1503 参数 1:无法从 'char' 转换为 'string' 错误 CS1503 参数 2:无法从 'System.Collections.Generic.IEnumerable'到'字符串'
  • 我将 e 替换为 d 并将分号分隔符的单引号更改为双引号。另外,我在 x.Split 方法中插入了一个“”(单个空格)。我可以确认所有作品!!!谢谢。如果您更新答案中的代码,我会将其标记为已接受。
  • 不知道我复制的原因是什么,但我现在已经进行了更改。与“e 无法声明”相关的错误一定是因为您的代码中已经定义了“e”,并且与我正在使用的“e”冲突。无论如何,很高兴它有所帮助。
  • bwt,string.split 不需要显式空格,因为默认行为是“如果分隔符参数为空或不包含字符,则假定空格字符为分隔符。” -> docs.microsoft.com/en-us/dotnet/api/…
  • 列表项中缺少类别(我想我不清楚要求),所以我修改了这一行,如下:.GroupBy(x => x.Category, y => y.Item, (k, d) => k + "|" + string.Join(";", d))
猜你喜欢
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多