我有一个List<int>
,可以包含1到n个值。
让我们说他们是四个整数{3,11,108,32}
我需要将整数列表构造成一个像这样的字符串
(3,11,108,32)
- 即。逗号分隔
我意识到这非常简单,但我正在寻找最有效的解决方案。
例如,如果您只有一个项目,则字符串中不应该有逗号,但应该存在所有其他项目之间。
答案 0 :(得分:6)
使用String.Join
和String.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)