C # List <string>을 구분 기호가있는 문자열로


631

C #에 일부 컬렉션을 문자열로 빠르게 변환하고 구분 기호로 값을 구분하는 함수가 있습니까?

예를 들면 다음과 같습니다.

List<string> names -> string names_together = "John, Anna, Monica"

답변:


1201

사용할 수 있습니다 String.Join. List<string>전화 번호 가 있으면 ToArray먼저 전화하십시오 .

List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());

.NET 4에서는 ToArray과부하 String.Join가 걸리므로 더 이상 필요하지 않습니다 IEnumerable<string>.

결과 :


존 안나


95

원하는 경우 linq를 사용하여이 작업을 수행 할 수도 있습니다

var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);

Quartermeister의 답변에서 비 Linq 구문을 선호하지만 Aggregate더 느리게 수행 할 수 있다고 생각 합니다 (아마도 더 많은 문자열 연결 작업).


19
빠른 답장을 보내 주셔서 감사합니다. 맞습니다. Stopwatch 클래스를 사용하여 작은 성능 측정을 수행했으며 linq-way가 훨씬 느립니다. String.Join ( ",", names.ToArray ()); -> 18 틱 진드기 집계 ((a, b) => a + ","+ b)-> 736 틱 진드기
nan

2
Aggregate, 수학 유형 연산에 더 좋습니다. 문자열을 사용하면이 작업 for each은 목록에 존재하는 각 항목에 대해 새 문자열을 생성하기 때문에 비효율적 인 문자열을 추가하고 추가하는 것과 비슷 합니다.
Bob

시드 값이없는 집계는 컨테이너가 비어있는 경우 InvalidOperationException을 발생시킵니다. 오류 처리 코드 또는 조건부 검사를 피하려면 시드 버전 Aggregate (seed, func)를 사용하십시오. String.Join은 비워지지 않으므로 시드 또는 추가 코드가 필요하지 않습니다. 또한 Linq가 필요하지 않으며 구문이 더 명확합니다.
Huacanacha

1
StringBuilder를 사용하면 위 예제의 집계가 더 빠르게 작동 할 수 있습니다. '+'를 사용하여 여러 연결을 수행하지 않는 것이 좋습니다. 참조 여기에 (섹션 비고 msdn.microsoft.com/en-us/library/... )
일리아 데니 소프
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.