구분

2009-04-15 2 views
29

로 구분 된 문자열로 문자열의 목록을 변환 뭐죠에 따라 달라집니다 쉼표 (,)구분

+1

속도/성능이 점을 설정하지 왜 문제? "가장 빠른 방법은 무엇입니까?" –

+0

Fastest AND/OR Efficient라고 할 수 없는가? – spacemonkeys

답변

95
String.Join(",", myListOfStrings.ToArray()) 
+0

ta blonde moment – spacemonkeys

+7

ToArray() 변환 전에 null/empty 체크를 추가 할 수 있습니다 : myListOfStrings.Where (Function (s) Not String.IsNullOrEmpty (s)) .ToArray()' –

1

로 구분 값으로 문자열로 (문자열) 목록을 변환하는 가장 좋은 방법 당신은 "최고"를 의미합니다. 메모리를 적게 사용하려면 먼저 최종 문자열의 크기를 계산 한 다음 해당 용량으로 StringBuilder를 만들고 문자열을 추가하십시오.

StringBuilder는 올바른 크기의 문자열 버퍼를 만들고 해당 버퍼는 ToString 메서드에서 문자열로 가져옵니다. 즉, 중간 문자열이나 배열이 추가로 만들어지지 않습니다.

// specify the separator 
string separator = ", "; 

// calculate the final length 
int len = separator.Length * (list.Count - 1); 
foreach (string s in list) len += s.Length; 

// put the strings in a StringBuilder 
StringBuilder builder = new StringBuilder(len); 
builder.Append(list[0]); 
for (int i = 1; i < list.Count; i++) { 
    builder.Append(separator).Append(list[i]); 
} 

// get the internal buffer as a string 
string result = builder.ToString(); 
+4

No 당신이 "최고"로 말한 것이 이것이 아마도 최고는 아닐지도 모릅니다. – mquander

+0

@mquander : 메모리 사용량이 가장 적습니다. 첫 번째 단락에서 명확하게 언급했습니다. 메모리 부하를 낮춰야하는 경우이 방법이 가장 좋습니다. – Guffa

+0

메모리 집약도면에서별로 다르지 않습니다. Join 메소드에는 중간 문자열이 없습니다. 그것은 단지 참조 배열 일뿐입니다. –

0

내 솔루션 :

string = ["a","2"]\n 
newstring = "" 
endOfString = len(string)-1 
for item in string: 
    newstring = newstring + item 
if item != string[endOfString]: 
    newstring = newstring ","' 
+1

의사 코드는 때로는 좋지만 실제 언어 구현이 선호됩니다. –

0

간단한 해결책 :

dim str as string = "" 
for each item as string in lst 
    str += ("," & item) 
next 
return str.substring(1) 

그것은 문자열에서 첫 번째 문자를 벗고 (",")