回答:
List<int> list = ...;
string.Join(",", list.Select(n => n.ToString()).ToArray())
簡単な解決策は
List<int> list = new List<int>() {1,2,3};
string.Join<int>(",", list)
私はコードでちょうどそれを使用して、素晴らしく機能しました。
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(String.Join(",", list.Select(i => i.ToString()).ToArray()));
この問題のもう少し複雑なバージョンの約1兆兆のソリューションについては、その多くが遅く、バグが多く、コンパイルもされません-この件に関する私の記事へのコメントを参照してください:
http://blogs.msdn.com/ericlippert/archive/2009/04/15/comma-quibbling.aspx
StackOverflowの解説:
さらにクールにするために、これをIEnumerable <T>の拡張メソッドにして、どのIEnumerableでも機能するようにします。
public static class IEnumerableExtensions {
public static string BuildString<T>(this IEnumerable<T> self, string delim = ",") {
return string.Join(delim, self)
}
}
次のように使用します。
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(list.BuildString(", "));
return string.Join(delim, self);
かなり速いようです。
IList<int> listItem = Enumerable.Range(0, 100000).ToList();
var result = listItem.Aggregate<int, StringBuilder, string>(new StringBuilder(), (strBuild, intVal) => { strBuild.Append(intVal); strBuild.Append(","); return strBuild; }, (strBuild) => strBuild.ToString(0, strBuild.Length - 1));
私の「賢い」エントリ:
List<int> list = new List<int> { 1, 2, 3 };
StringBuilder sb = new StringBuilder();
var y = list.Skip(1).Aggregate(sb.Append(x.ToString()),
(sb1, x) => sb1.AppendFormat(",{0}",x));
// A lot of mess to remove initial comma
Console.WriteLine(y.ToString().Substring(1,y.Length - 1));
コンマを条件付きで追加する方法がわからないだけです。
Select
ラムダに副作用を書かないでください。この場合、あなたもを使用していないy
ので、あなたSelect
は本質的に単なるa foreach
なので、そのように書いてください。
Select
ことforeach
は。ここではより興味深いアプローチが使用するだろうEnumerable.Aggregate
とのStringBuilder
試みをすることを-シード値として。