2012-02-11 5 views

ответ

11

Другим решением было бы использование Aggregate. Это, как известно, намного медленнее, а затем другие предоставленные решения!

var ints = new List<int>{1,2,3,4}; 
var strings = 
      ints.Select(i => i.ToString(CultureInfo.InvariantCulture)) 
       .Aggregate((s1, s2) => s1 + ", " + s2); 

См. Комментарии ниже, почему вы не должны использовать его. Используйте вместо этого String.Join или StringBuilder.

+6

-1 Самое плохое решение для создания таких строк (особенно когда список длинный). String.Join или StringBuilder - это путь. Грустно для переполнения стека, что ОП низкого качества даже не знает, как принять лучший ответ. –

+5

@GertArnold Я согласен с тобой. Просто хотел показать другое решение и забыл упомянуть что-нибудь о производительности. Я попытался удалить этот ответ, но не могу. Я буду обновлять ответ, чтобы не использовать его. –

+1

Это очень щедро. Удалено нисходящее. –

17
var ints = new List<int>{1,3,4}; 
var stringsArray = ints.Select(i=>i.ToString()).ToArray(); 
var values = string.Join(",", stringsArray); 
+0

Спасибо Альбин. E для задачи восстановления, из цепочки с запятыми, мне нужно получить список . Luigi – Ciupaz

+4

В .NET 4 ['String.Join'] (http://msdn.microsoft.com/en-us/library/dd992421.aspx) есть перегрузка с использованием' IEnumerable ', поэтому это можно сделать без промежуточный массив (эта перегрузка вызывает 'ToString()' для каждого элемента ввода): 'string.Join (", ", ints)'. – Richard

+1

@Ciupaz, для обратной задачи, используйте ['String.Split()'] (http://msdn.microsoft.com/en-us/library/system.string.split.aspx). –

64
var nums = new List<int> {1, 2, 3}; 
var result = string.Join(", ", nums); 
+0

Спасибо Meysam – Ciupaz

+4

Обратите внимание, что это не работает в .NET 3.5 и ранее (второй параметр должен быть строкой []). См. Ответ Альбина Суннанбо. – Itison

0
public static string ToCommaString(this List<int> list) 
{ 
    if (list.Count <= 0) 
     return (""); 
    if (list.Count == 1) 
     return (list[0].ToString()); 
    System.Text.StringBuilder sb = new System.Text.StringBuilder(list[0].ToString()); 
    for (int x = 1; x < list.Count; x++) 
     sb.Append("," + list[x].ToString()); 
    return (sb.ToString()); 
} 

public static List<int> CommaStringToIntList(this string _s) 
{ 
    string[] ss = _s.Split(','); 
    List<int> list = new List<int>(); 
    foreach (string s in ss) 
     list.Add(Int32.Parse(s)); 
    return (list); 
} 

Использование:

String s = "1,2,3,4"; 
List<int> list = s.CommaStringToIntList(); 
list.Add(5); 
s = list.ToCommaString(); 
s += ",6"; 
list = s.CommaStringToIntList(); 
+0

Почему вы опубликовали это альтернативное решение, когда уже были предоставлены некоторые очень компактные решения с использованием string.Join()? –

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