生成逗号分隔值

2024-05-16

假设我有一个字符串集合:

"foo"
"bar"
"xyz"

我想从列表中生成一个逗号分隔的值,如下所示:

"foo, bar, xyz"

请注意末尾缺少“,”。

我知道有多种方法可以生成此内容:

  • 使用 for 循环和 string.Format() 或 StringBuilder。
  • 使用整数计数器并删除结尾的“,”(如果值> 0)
  • 不要在第一次运行时添加“,”
  • etc.

我现在拥有的示例代码:

if (strs.Count() > 0)
{
  var sb = new StringBuilder();
  foreach (var str in strs)
    sb.AppendFormat("{0}, ", str);
  return sb.Remove(0, 2).ToString();
}

对于上述场景,高度可重用的最佳代码是什么?为什么?


您想使用string.Join http://msdn.microsoft.com/en-us/library/57a79xd0.aspx方法,BCL 中存在用于此目的的方法。

Example:

var myArray = new string[] { "one", "two", "three" };
var output = string.Join(", ", myArray);

或者,如果您使用的是 .NET 3.5,则可以使用任何IEnumerable<string>像这样:

var output = string.Join(", ", myEnumerable.ToArray());

(请注意,这并不能提供所需的最佳性能,尽管它显然仍然是“O(n)”,并且应该适用于几乎所有情况)。

现在,如果您的枚举不是类型string(一般来说IEnumerable<T>),你可以只使用Select方法将结果转换为字符串,例如

var output = string.Join(", ", myEnumerable.Select(e => e.ToString()).ToArray());

我不确定您是否正在处理本身可能包含逗号的值,但这可以通过将它们括在引号中来解决(") 并转义引号,类似于 CSV 格式。

var output = string.Join(", ", items.Select(x => x.Contains(",") ?
    "\"" + x.Replace("\"", "\"\"") + "\"" : x);

当然,将它们再次拆分是一项稍微复杂的任务,这需要一些正则表达式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成逗号分隔值 的相关文章

随机推荐