条件字符串聚合.net

时间:2011-08-08 07:05:52

标签: .net string aggregate

我有以下代码

var definitionMap = definitions.Aggregate("", (current, next) => 
    current +  "[\\W\\s]" + 
    next.Tag.Replace("(", "\\(").Replace(")", "\\)") + "[\\W\\s]" + "|");

这很有效,除了我得到一个尾随|最后,我可以手动删除它,但无论如何都要阻止聚合方法将其放在首位

2 个答案:

答案 0 :(得分:2)

您可以在每个词的 start 处有条件地添加它,即

(current, next) => (current == "" ? "" : "|") + ...

但是,我还建议您在此处查看StringBuilderforeach循环,而不是Aggregate。实际上,由于StringBuilder有一个流畅的API,你可以实际Aggregate内使用它 - 但我不推荐它。仅仅因为你可以使用LINQ扩展方法并不意味着它自动更清晰更好。在这种情况下,它既不是IMO。特别是,目前您正在生成 lot 不必要的中间字符串。

答案 1 :(得分:0)

为什么不选择String.JoinSelect

var definitionMap =
    String.Join("|",
        definitions.Select(
            next =>
                "[\\W\\s]"
                + next.Tag.Replace("(", "\\(").Replace(")", "\\)")
                + "[\\W\\s]"));