我有以下代码
var definitionMap = definitions.Aggregate("", (current, next) =>
current + "[\\W\\s]" +
next.Tag.Replace("(", "\\(").Replace(")", "\\)") + "[\\W\\s]" + "|");
这很有效,除了我得到一个尾随|最后,我可以手动删除它,但无论如何都要阻止聚合方法将其放在首位
答案 0 :(得分:2)
您可以在每个词的 start 处有条件地添加它,即
(current, next) => (current == "" ? "" : "|") + ...
但是,我还建议您在此处查看StringBuilder
和foreach
循环,而不是Aggregate
。实际上,由于StringBuilder
有一个流畅的API,你可以实际在Aggregate
内使用它 - 但我不推荐它。仅仅因为你可以使用LINQ扩展方法并不意味着它自动更清晰或更好。在这种情况下,它既不是IMO。特别是,目前您正在生成 lot 不必要的中间字符串。
答案 1 :(得分:0)
为什么不选择String.Join
和Select
?
var definitionMap =
String.Join("|",
definitions.Select(
next =>
"[\\W\\s]"
+ next.Tag.Replace("(", "\\(").Replace(")", "\\)")
+ "[\\W\\s]"));