C#-IEnumerable可以分隔字符串
时间:2020-03-06 15:04:40 来源:igfitidea点击:
将" IEnumerable <string>"转换为定界字符串的功能编程方法是什么?我知道我可以使用循环,但是我想把头放在函数式编程上。
这是我的示例:
var selectedValues = from ListItem item in checkboxList.Items where item.Selected select item.Value; var delimitedString = ??
..还是我可以只在第一个var分配中执行此操作(将每个结果追加到前一个var赋值)?
解决方案
string.Join(", ", string[] enumerable)
var delimitedString = string.Join(",", checkboxList.Items.Where(i => i.Selected).Select(i => i.Value).ToArray());
好吧,在这种情况下,函数方法可能不是最适合的,仅仅是因为没有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 [],则string.Join非常完美。
(LINQ是一个很棒的工具,但不一定总是每个工作的最佳工具)
var delimitedString = selectedValues.Aggregate((x,y) => x + ", " + y);
这是一种实现LINQ /功能的方法。
string[] toDelimit = CallSomeFunction(); return toDelimit.Aggregate((x, y) => x + "," + y);
AviewAnew是最好的答案,但是如果我们要查找的是学习如何在函数中进行思考,则应该执行的操作是使用折叠操作(或者在NET中进行汇总)。
items.Aggregate((accum, elem) => accum + ", " + elem);
这是一个带有StringBuilder的例子。不错的是,Append()返回了StringBuilder实例本身。
return list.Aggregate( new StringBuilder(), ( sb, s ) => ( sb.Length == 0 ? sb : sb.Append( ',' ) ).Append( s ) );