C# - IEnumerable分隔字符串

时间:2008-10-03 14:26:50

标签: c# functional-programming

IEnumerable<string>转换为分隔字符串的函数式编程方法是什么?我知道我可以使用一个循环,但我正试图绕过函数式编程。

这是我的例子:

var selectedValues =
from ListItem item in checkboxList.Items
where item.Selected
select item.Value;

var delimitedString = ??

..或者我可以在第一个var赋值中执行此操作(将每个结果追加到前一个)?

8 个答案:

答案 0 :(得分:33)

string.Join(", ", string[] enumerable)

答案 1 :(得分:23)

以下是StringBuilder的示例。好消息是Append()返回StringBuilder实例本身。

  return list.Aggregate( new StringBuilder(), 
                               ( sb, s ) => 
                               ( sb.Length == 0 ? sb : sb.Append( ',' ) ).Append( s ) );

答案 2 :(得分:18)

var delimitedString = selectedValues.Aggregate((x,y) => x + ", " + y);

答案 3 :(得分:4)

var delimitedString = string.Join(",", checkboxList.Items.Where(i => i.Selected).Select(i => i.Value).ToArray());

答案 4 :(得分:3)

AviewAnew是最好的答案,但如果你正在寻找的是学习如何思考功能,你应该做的是使用折叠操作(或在.NET中调用聚合)。

items.Aggregate((accum, elem) => accum + ", " + elem);

答案 5 :(得分:2)

嗯,在这种情况下,功能方法可能不是最合适的,只是因为没有LINQ“ForEach”,并且您不想使用字符串连接:您想要使用StringBuilder。您可以使用ToArray(上面刚刚出现的示例),但我很想使用:

    StringBuilder sb = new StringBuilder();
    foreach(ListViewItem item in checkboxList.SelectedItems) {
        if(sb.Length > 0) sb.Append(',');
        sb.Append(item.Text);
    }
    string s = sb.ToString();

不是函数式编程,但它有效...当然,如果你的源已经一个字符串[],那么string.Join是完美的。 (LINQ是一个很棒的工具,但不一定总是每个工作的最佳工具)

答案 6 :(得分:1)

这是一种LINQ /功能方式。


string[] toDelimit = CallSomeFunction();
return toDelimit.Aggregate((x, y) => x + "," + y);

答案 7 :(得分:0)

这是3.5兼容:

var selectedValues = String.Join(",", (from ListItem item in checkboxList.Items where item.Selected select item.Value).ToArray());