Select 在 Linq 中通过分隔符分隔另一个列表的列表
Select List of another List by separating delimiter in Linq
我正在尝试 select 一个列表,该列表本身有另一个列表。但问题是我需要使用一些分隔符来分隔我的两个列表
我的名单是
{
"Order": {
"Items": [
{
"Details": [
{
"Product": "XXX",
"Category": "YYY"
},
{
"Product": "ZZZ",
"Category": "YYY"
}
]
},
{
"Details": [
{
"Product": "AAA",
"Category": "BBB"
}
]
}
]
}
}
我的最终输出应该是这样的
XXX|YYYY^ZZZ|YYY^AAA|BBB
目前,我正在使用如下解决方案。
StringBuilder output= new StringBuilder();
string delimiter = "";
foreach (var items in order.Items) {
output.Append(delimiter);
output.Append(string.Join("^",items.Details.Select(l => l.Product+"|"+l.Category)));
delimiter = "^";
}
但这不是最好的选择。请帮忙找一个好的。
您可以将单个 string.Join
与 LINQ 的 SelectMany
:
一起使用
string result = string.Join("^", order.Items.SelectMany(
item => item.Details.Select(detail => $"{detail.Product}|{detail.Category}")));
这会遍历所有 Items
中的所有 Details
并创建您的 "Product|Category" 字符串。然后这些字符串都用“^”作为分隔符连接起来。
我不知道您 "good" 的标准。如果您觉得这篇文章易于阅读并且认为您的同事也会理解它,我想这很好。可能有更有效的方法(就消耗的时间而言),但我认为只有当您有数十亿 Details
或需要每毫秒执行两次时,这才是真正的问题。
我正在尝试 select 一个列表,该列表本身有另一个列表。但问题是我需要使用一些分隔符来分隔我的两个列表
我的名单是
{
"Order": {
"Items": [
{
"Details": [
{
"Product": "XXX",
"Category": "YYY"
},
{
"Product": "ZZZ",
"Category": "YYY"
}
]
},
{
"Details": [
{
"Product": "AAA",
"Category": "BBB"
}
]
}
]
}
}
我的最终输出应该是这样的
XXX|YYYY^ZZZ|YYY^AAA|BBB
目前,我正在使用如下解决方案。
StringBuilder output= new StringBuilder();
string delimiter = "";
foreach (var items in order.Items) {
output.Append(delimiter);
output.Append(string.Join("^",items.Details.Select(l => l.Product+"|"+l.Category)));
delimiter = "^";
}
但这不是最好的选择。请帮忙找一个好的。
您可以将单个 string.Join
与 LINQ 的 SelectMany
:
string result = string.Join("^", order.Items.SelectMany(
item => item.Details.Select(detail => $"{detail.Product}|{detail.Category}")));
这会遍历所有 Items
中的所有 Details
并创建您的 "Product|Category" 字符串。然后这些字符串都用“^”作为分隔符连接起来。
我不知道您 "good" 的标准。如果您觉得这篇文章易于阅读并且认为您的同事也会理解它,我想这很好。可能有更有效的方法(就消耗的时间而言),但我认为只有当您有数十亿 Details
或需要每毫秒执行两次时,这才是真正的问题。