2009-04-15 4 views
29

Что лучший способ для преобразования списка (строки) в строку со значениями, разделенных запятой (,)Преобразование Списка строки в строку, разделенный разделителем

+1

Почему бы не превратить это в скорости/производительности вопрос? «Какой самый быстрый способ ...» –

+0

Не может быть лучше всего преследовать как самый быстрый и/или эффективный? – spacemonkeys

ответ

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

ta blonde moment – spacemonkeys

+7

Единственное, что я могу добавить, это проверка null/empty перед преобразованием 'ToArray()': 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

Нет что вы имеете в виду под «лучшим», это, вероятно, не самый лучший. – 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) 

Это снимает первый символ из строки (",")

Смежные вопросы