我希望把int數組或列表到逗號分隔的字符串,像這樣:的string.join在列表<int>或其他類型的
string myFunction(List<int> a) {
return string.Join(",", a);
}
不過的string.join只需要List<string>
作爲第二個參數。做這個的最好方式是什麼?
我希望把int數組或列表到逗號分隔的字符串,像這樣:的string.join在列表<int>或其他類型的
string myFunction(List<int> a) {
return string.Join(",", a);
}
不過的string.join只需要List<string>
作爲第二個參數。做這個的最好方式是什麼?
,最好的辦法是升級到.NET 4.0,其中有一個重載,你想要做什麼:
如果不能升級,就可以達到同樣的使用Select和ToArray的效果。
return string.Join(",", a.Select(x => x.ToString()).ToArray());
也假設他至少在C#3,.NET 3.5 – 2010-08-31 15:19:40
這是一個很好的解決方案! – Stefanvds 2010-08-31 15:20:24
爲什麼使用LINQ而不是'List
如果你不想冒險進入.NET 4.0的深處,這個答案是適合你的。
String.Join()使用每個元素之間指定的分隔符連接字符串數組的所有元素。
語法
public static string Join(
string separator,
params string[] value
)
而不是通過你的整數的列表中加入的方法,我建議首先建立一個字符串數組。
這裏是我的建議:
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);
}
如果有人還在2.0上,這是一個體面的方法。但是,'intArray'是不必要的。 '列表
要是我修改這個
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
這是一個模仿Ruby中數組連接方法的黑客攻擊。 http://ruby-doc.org/core/classes/Array.html#M002182 – 2010-08-31 15:58:40
另外.ToString()並不總是返回T的字符串表示,所以我想這可能會造成一些混淆。 – 2010-08-31 16:00:07
。 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();
}
一個很好的2.0方法。您可能希望將連接字符作爲參數,而不是將其硬編碼到該方法中。 – 2010-08-31 15:48:20
@Anthony - 好點。完成。 – 2010-08-31 15:50:31
典型的優化是在不進行測試的情況下附加分隔符,然後在退出循環後刪除最後一個字符。 – 2010-08-31 16:15:04
一個可擴展和安全實現一個通用的枚舉字符串的加入對.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));
享受!
+1:這是我在.NET 4.0之前的首選方式。比從int列表生成全新字符串數組更可伸縮,以便可以調用String.Join(String,String [])'。唯一我要說的是,在'String'上看到這個方法是一個擴展,而不是'IEnumerable
我從Python偷取了這個想法,如果有任何幫助的話! – Deleted 2010-08-31 19:47:37
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> Methods(MSDN)
這個['來自2010'的答案](http://stackoverflow.com/a/3610905/1733163)已經聲明,做'string.Join'時隱含'ToString'。 – Miller 2014-03-31 23:31:09
的C#什麼版本/ .NET您使用的? – 2010-08-31 15:23:58
我正在使用.NET 3.5 – 2010-08-31 15:39:36
可能的重複http://stackoverflow.com/questions/3211422/linq-convert-a-listint-to-a-joined-string-of-ints – goodeye 2013-11-19 01:40:42