C#에서 쉼표로 구분된 목록 만들기
-
String.Join()
메서드를 사용하여C#
에서 쉼표로 구분된 목록 만들기 -
LINQ Aggregate 메서드를 사용하여
C#
에서 쉼표로 구분된 목록 만들기 -
StringBuilder 메서드를 사용하여
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
메서드를 사용하여 두 컬렉션을 결합했습니다. 변수 x
및 y
는 원하는 변수 이름으로 변경할 수 있습니다. 이 방법의 이면에 있는 아이디어는 결합할 값이 남아 있는 경우 이전 문자열을 다음 문자열에 연결한다는 것입니다.
출력:
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