[c#] List <int>를 쉼표로 구분 된 문자열로 변환

목록을 가져 와서 쉼표로 구분 된 문자열로 변환하는 방법이 있습니까?

나는 내가 그것을 반복하고 만들 수 있다는 것을 알고 있지만 어떻게 든 여러분 중 일부는 그것을하는 더 멋진 방법이라고 생각합니까?

나는 이러한 유형의 ‘트릭’을 정말로 배우고 싶으므로 사용하는 방법에 대해 설명하거나 문서에 링크하십시오.



답변

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()));


답변

이 문제의 약간 더 복잡한 버전에 대한 약 한 무량의 솔루션 (대부분이 느리거나 버그가 있거나 컴파일도하지 않음)에 대해서는이 주제에 대한 내 기사의 주석을 참조하십시오.

http://blogs.msdn.com/ericlippert/archive/2009/04/15/comma-quibbling.aspx

및 StackOverflow 설명 :

Eric Lippert의 “콤마 퀴 블링”도전, 베스트 답변?


답변

추가 멋짐을 위해 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(", "));


답변

상당히 빠른 것 같습니다.

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));

조건부로 쉼표를 추가하는 방법을 찾지 못했습니다.