将List <int>拆分为字符串</int>的有效方法

时间:2014-06-24 06:43:06

标签: c#

我有一个List<int>,可以包含1到n个值。

让我们说他们是四个整数{3,11,108,32} 我需要将整数列表构造成一个像这样的字符串

(3,11,108,32) - 即。逗号分隔

我意识到这非常简单,但我正在寻找最有效的解决方案。

例如,如果您只有一个项目,则字符串中不应该有逗号,但应该存在所有其他项目之间。

3 个答案:

答案 0 :(得分:6)

使用String.JoinString.Format来避免创建许多内存中的子字符串:

String.Format("({0})", String.Join(",", listOfIntegers))

这里将创建两个字符串。您也可以使用StringBuilder并手动构建字符串:

StringBuilder builder = new StringBuilder();
builder.Append("(");
foreach (var value in listOfIntegers)
    builder.AppendFormat("{0},", value);
if (builder.Length > 1)
    builder.Remove(builder.Length - 1, 1);
builder.Append(")");
var result = builder.ToString();

但我会采用第一种方法,特别是如果整数列表不是很大。

答案 1 :(得分:1)

如果您使用.NET 4+,则可以使用String.Join(String, IEnumerable<T>) overload

这是LINQPad;

的示例
List<int> ints  = new List<int>(){3, 11, 108, 32};
string joined = string.Join(",", ints);
string.Format("({0})", joined).Dump();

输出将是;

(3,11,108,32)

答案 2 :(得分:0)

由于我是Extension方法的忠实粉丝,我会在这里使用。

首先是扩展方法:

public static class Extensions
{
    public static void ForEachElement<T>(this IEnumerable<T> @enum, Action<T> mapFunction)
    {
        foreach (var item in @enum) mapFunction(item);
    }
}

此扩展方法允许我对Ienumerable中的每个元素执行指定的操作。

然后将int的列表格式化为字符串,您可以这样做:

 var numbers = new List<int>() { 10, 11, 4, 5, 9, 12 };

 var sb = new StringBuilder();
 sb.Append("(");
 numbers.ForEachElement(x => sb.Append(x.ToString(CultureInfo.InvariantCulture) + ","));

 string output = sb.ToString().TrimEnd(new[] { ',' }) + ")";
 MessageBox.Show(output);

这将产生输出:

(10,11,4,5,6,12)