我想将整数数组或整数列表转换成逗号分隔的字符串,如下所示:
string myFunction(List<int> a) {
return string.Join(",", a);
}
但是string.Join仅List<string>
作为第二个参数。做这个的最好方式是什么?
我想将整数数组或整数列表转换成逗号分隔的字符串,如下所示:
string myFunction(List<int> a) {
return string.Join(",", a);
}
但是string.Join仅List<string>
作为第二个参数。做这个的最好方式是什么?
Answers:
最好的方法是升级到.NET 4.0,其中存在可以满足您需要的重载:
如果无法升级,则可以使用Select和ToArray达到相同的效果。
return string.Join(",", a.Select(x => x.ToString()).ToArray());
ToArray
方法List<T>
?
int
。
一个可扩展和安全的实现一个通用的枚举字符串的加入对.NET 3.5。迭代器的用法是使连接字符串值不停留在字符串的末尾。它可以与0、1和更多元素一起正常工作:
public static class StringExtensions
{
public static string Join<T>(this string joinWith, IEnumerable<T> list)
{
if (list == null)
throw new ArgumentNullException("list");
if (joinWith == null)
throw new ArgumentNullException("joinWith");
var stringBuilder = new StringBuilder();
var enumerator = list.GetEnumerator();
if (!enumerator.MoveNext())
return string.Empty;
while (true)
{
stringBuilder.Append(enumerator.Current);
if (!enumerator.MoveNext())
break;
stringBuilder.Append(joinWith);
}
return stringBuilder.ToString();
}
}
用法:
var arrayOfInts = new[] { 1, 2, 3, 4 };
Console.WriteLine(",".Join(arrayOfInts));
var listOfInts = new List<int> { 1, 2, 3, 4 };
Console.WriteLine(",".Join(listOfInts));
请享用!
String.Join(String, String[])
可以调用。我唯一要说的是,看到此方法写为扩展String
而不是与众不同是不寻常的IEnumerable<String>
-我倾向于总是在一长串扩展方法调用的末尾调用它。
.NET 2.0:
static string IntListToDelimitedString(List<int> intList, char Delimiter)
{
StringBuilder builder = new StringBuilder();
for (int i = 0; i < intList.Count; i++)
{
builder.Append(intList[i].ToString());
if (i != intList.Count - 1)
builder.Append(Delimiter);
}
return builder.ToString();
}
如果您现在还不想涉足.NET 4.0的深度,那么此答案适合您。
String.Join()使用每个元素之间的指定分隔符来连接字符串数组的所有元素。
语法是
public static string Join(
string separator,
params string[] value
)
建议不要先将整数列表传递给Join方法,而建议先构建一个字符串数组。
这是我的建议:
static string myFunction(List<int> a) {
int[] intArray = a.ToArray();
string[] stringArray = new string[intArray.Length];
for (int i = 0; i < intArray.Length; i++)
{
stringArray[i] = intArray[i].ToString();
}
return string.Join(",", stringArray);
}
intArray
是不必要的。List<int>
是可索引的并具有Count
属性,从而使到数组的转换变得多余。您可能还想将连接字符作为参数,而不是将其硬编码到方法中。
我有一个类似的扩展方法对此进行了修改
public static class MyExtensions
{
public static string Join(this List<int> a, string splitChar)
{
return string.Join(splitChar, a.Select(n => n.ToString()).ToArray());
}
}
然后像这样使用
var test = new List<int>() { 1, 2, 3, 4, 5 };
string s = test.Join(",");
.NET 3.5
IEnumerable<T>
已经有一个Join
方法,并且此新方法执行完全不同的操作,从而使其用法与直觉相反。其次,如果你是要创建这个方法,继续前进,使之适用一般。
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string s = myFunction(PopulateTestList());
this.TextBox1.Text = s;
}
protected List<int> PopulateTestList()
{
List<int> thisList = new List<int>();
thisList.Add(22);
thisList.Add(33);
thisList.Add(44);
return thisList;
}
protected string myFunction(List<int> a)
{
return string.Join(",", a);
}
}
在.NET中,列表类具有一个.ToArray()
方法。这样的事情可能会起作用:
string myFunction(List<int> a)
{
return string.Join(",", a.ToArray());
}
参考:List <T>方法(MSDN)