如何使用函数式编程方法将 IEnumerable<string>
转换为分隔字符串?我知道可以使用循环,但我正在尝试理解函数式编程。
以下是我的示例:
var selectedValues =
from ListItem item in checkboxList.Items
where item.Selected
select item.Value;
var delimitedString = ??
我能否只在第一个变量赋值时完成这个操作(将每个结果附加到前一个结果)?
如何使用函数式编程方法将 IEnumerable<string>
转换为分隔字符串?我知道可以使用循环,但我正在尝试理解函数式编程。
以下是我的示例:
var selectedValues =
from ListItem item in checkboxList.Items
where item.Selected
select item.Value;
var delimitedString = ??
我能否只在第一个变量赋值时完成这个操作(将每个结果附加到前一个结果)?
string.Join(", ", string[] enumerable)
这是一个使用StringBuilder
的示例。好处是Append()
返回StringBuilder
实例本身。
return list.Aggregate( new StringBuilder(),
( sb, s ) =>
( sb.Length == 0 ? sb : sb.Append( ',' ) ).Append( s ) );
var delimitedString = selectedValues.Aggregate((x,y) => x + ", " + y);
var delimitedString = string.Join(",", checkboxList.Items.Where(i => i.Selected).Select(i => i.Value).ToArray());
AviewAnew是最好的选择,但如果你想学习如何以函数式思维来编程,你应该使用fold操作(在.NET中称为aggregate)。
items.Aggregate((accum, elem) => accum + ", " + elem);
嗯,在这种情况下,函数式方法可能不是最合适的选择,因为没有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[] toDelimit = CallSomeFunction();
return toDelimit.Aggregate((x, y) => x + "," + y);
这是3.5兼容的:
var selectedValues = String.Join(",", (from ListItem item in checkboxList.Items where item.Selected select item.Value).ToArray());