C#에서 쉼표로 구분된 목록 만들기

Fil Zjazel Romaeus Villegas 2023년10월12일
  1. String.Join() 메서드를 사용하여 C#에서 쉼표로 구분된 목록 만들기
  2. LINQ Aggregate 메서드를 사용하여 C#에서 쉼표로 구분된 목록 만들기
  3. StringBuilder 메서드를 사용하여 C#에서 쉼표로 구분된 목록 만들기
C#에서 쉼표로 구분된 목록 만들기

이 자습서에서는 string.Join(), LINQ Aggregate, 또는 StringBuilder를 사용하여 IList<string 또는 IEnumerable<string>과 같은 컨테이너에서 쉼표로 구분된 목록을 만드는 방법을 보여줍니다.

String.Join() 메서드를 사용하여 C#에서 쉼표로 구분된 목록 만들기

컨테이너 값을 결합하는 가장 간단한 방법은 string.Join()입니다. string.Join() 함수는 컬렉션의 모든 값을 가져와 정의된 구분 기호와 연결합니다. 이 방법을 사용하면 쉼표로 구분된 목록뿐만 아니라 다른 구분 기호도 만들 수 있습니다.

string joined_str = string.Join(separator, source);

구분자 매개변수는 문자열이어야 하며 소스는 모든 데이터 유형의 모음일 수 있습니다.

예시:

using System;
using System.Collections.Generic;

namespace StringJoin_Example {
  class Program {
    static void Main(string[] args) {
      // Initialize the IList
      IList<Int32> list_strings = new List<Int32> { 1, 2, 3 };
      // Join the IList with a comma
      string joined_list = string.Join(", ", list_strings);
      // Print the results
      Console.WriteLine("From List: " + joined_list);

      // Initialize the IEnumerable
      IEnumerable<string> enum_strings =
          new List<string>() { "Enum Sample 1", "Enum Sample 2", "Enum Sample 3" };
      // Join the IEnumerable with a semi colon
      string joined_enum = string.Join("; ", enum_strings);
      // Print the results
      Console.WriteLine("From Enumerable: " + joined_enum);

      Console.ReadLine();
    }
  }
}

위의 예에서 정수 목록과 열거 가능한 문자열 목록이라는 두 가지 소스를 만들었습니다. 그런 다음 두 개의 서로 다른 구분 기호가 있는 동일한 string.Join() 메서드를 사용하여 결합한 다음 결과 문자열을 콘솔에 인쇄했습니다.

출력:

From List: 1, 2, 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3

LINQ Aggregate 메서드를 사용하여 C#에서 쉼표로 구분된 목록 만들기

컬렉션 값을 조인하기 위한 또 다른 옵션은 LINQ Aggregate 메서드를 사용하는 것입니다. 코딩하기는 쉽지만 특히 입력이 클수록 비효율적인 것으로 간주됩니다. 이 메서드는 입력 개수가 1 미만인 경우에도 오류가 발생하므로 매번 원활하게 실행되도록 하려면 더 많은 오류 처리가 필요할 수 있습니다.

string joined_str = input.Aggregate((x, y) => x + ", " + y);

첫 번째 방법과 마찬가지로 모든 문자열 입력을 구분 기호로 사용할 수 있지만 이 방법은 결과 값이 입력과 동일할 것으로 예상합니다. 예를 들어, 입력 컬렉션이 정수 목록인 경우 이 함수는 작동하지 않습니다.

예시:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqAggregate_Example {
  class Program {
    static void Main(string[] args) {
      // Initialize the IList
      IList<string> list_strings =
          new List<string> { "List Sample 1", "List Sample 2", "List Sample 3" };
      // Join the IList with a comma using LINQ Aggregate
      string joined_list = list_strings.Aggregate((x, y) => x + ", " + y);
      // Print the results
      Console.WriteLine("From List: " + joined_list);

      // Initialize the IEnumerable
      IEnumerable<string> enum_strings =
          new List<string>() { "Enum Sample 1", "Enum Sample 2", "Enum Sample 3" };
      // Join the IEnumerable with a semi colon using LINQ Aggregate
      string joined_enum = enum_strings.Aggregate((x, y) => x + "; " + y);
      // Print the results
      Console.WriteLine("From Enumerable: " + joined_enum);

      Console.ReadLine();
    }
  }
}

위의 예에서는 LINQ Aggregate 메서드를 사용하여 두 컬렉션을 결합했습니다. 변수 xy는 원하는 변수 이름으로 변경할 수 있습니다. 이 방법의 이면에 있는 아이디어는 결합할 값이 남아 있는 경우 이전 문자열을 다음 문자열에 연결한다는 것입니다.

출력:

From List: List Sample 1, List Sample 2, List Sample 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3

StringBuilder 메서드를 사용하여 C#에서 쉼표로 구분된 목록 만들기

마지막으로 논의할 옵션은 StringBuilder 메서드입니다. 다른 두 가지 방법과 비교할 때 이 방법은 작성하는 데 약간의 코드가 필요하지만 훨씬 더 많은 사용자 정의가 가능합니다. 함수 내에서 원하는 경우 값을 수정하는 단계를 더 추가할 수 있습니다. 예를 들어 날짜/시간 목록을 전달하는 경우 지정된 날짜/시간 형식을 사용하면서 값을 결합할 수 있습니다.

예시:

using System;
using System.Collections.Generic;
using System.Text;

namespace StringBuilder_Example {
  class Program {
    static void Main(string[] args) {
      // Initialize the IList
      IList<string> list_strings =
          new List<string> { "List Sample 1", "List Sample 2", "List Sample 3" };
      // Join the IList with a comma using the StringBuilder method
      string joined_list = join_collection(", ", list_strings);
      // Print the results
      Console.WriteLine("From List: " + joined_list);

      // Initialize the IEnumerable
      IEnumerable<string> enum_strings =
          new List<string>() { "Enum Sample 1", "Enum Sample 2", "Enum Sample 3" };
      // Join the IEnumerable with a semi colon using the StringBuilder method
      string joined_enum = join_collection("; ", enum_strings);
      // Print the results
      Console.WriteLine("From Enumerable: " + joined_enum);

      Console.ReadLine();
    }

    static string join_collection<T>(string separator, IEnumerable<T> values) {
      // Initialize StringBuilder
      StringBuilder sb = new StringBuilder();

      // Intialize the item counter
      int ctr = 0;
      foreach (T item in values) {
        string sep = "";
        if (ctr > 0) {
          // If the first item from the value collection has already been added, use the specified
          // separator This is to avoid printing the separator as the first value of the string
          sep = separator;
        }

        // Append the separator and the value as a string
        sb.Append(sep);
        sb.Append(item.ToString());
        ctr++;
      }

      // Return the built string
      return sb.ToString();
    }
  }
}

위의 예에서는 문자열 구분 기호와 열거 가능한 컬렉션을 허용하는 사용자 지정 함수 join_collection을 사용하여 컬렉션을 조인했습니다. 그런 다음 값은 StringBuilder를 사용하여 함께 결합되고 구분 기호 및 컬렉션 값을 추가합니다.

출력:

From List: List Sample 1, List Sample 2, List Sample 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3

관련 문장 - Csharp List