从List <int> </int>返回字符串的最优雅方式

时间:2009-08-26 11:30:39

标签: c#

从List返回字符串的最佳方式是什么 好的,是的,我知道我可以做类似

的事情
public string Convert(List<int> something)
{
    var s = new StringBuilder();
    foreach(int i in something)
        s.AppendFormat("{0} ", i);

    return s.ToString();
}

但我确信有一种方法可以用lambdas来做到这一点 我还试图附加到一个字符串构建器,但这没有做什么预期

8 个答案:

答案 0 :(得分:24)

IMO,你的原版更好; LINQ很棒,但它不是每个问题的答案。特别是,string.Join方法需要额外的数组(为了获得少量收益),Aggregate方法使用批次的中间字符串。

也许让它成为一种扩展方法 - 然后失去Format的东西:

public static string Concatenate<T>(this IEnumerable<T> source, string delimiter)
{
   var s= new StringBuilder();
   bool first = true;
   foreach(T t in source) {
      if(first) {
        first = false;
      } else {
        s.Append(delimiter);
      }
      s.Append(t);
   }    
   return s.ToString();
}

答案 1 :(得分:17)

String result = String.Join(" ", list.Select(item => item.ToString()).ToArray());

要解决null问题,可以添加Where(item => item != null),使用条件运算符或空合并运算符。但是,添加到表达式中的每个“修复”都会降低其可读性和优雅性。

答案 2 :(得分:10)

使用string.Join:

string.Join(" ", something.Select(i => i.ToString()).ToArray())

答案 3 :(得分:5)

使用string.Join

List<int> data = ..;
var result = string.Join(";", data); // (.NET 4.0 only)
var result = string.Join(";", data.Select(x => x.ToString()).ToArray()); // (.NET 3.5)

答案 4 :(得分:3)

又一种推广方法:

public static class Extensions {
    public static string Join(this List<int> list) {
        return string.Join(" ", list.Select(item => item.ToString()).ToArray());
    }
}

用法:

string s = new List<int> {1, 2, 3}.Join();

答案 5 :(得分:1)

利用StringBuilder和LINQ:

    public static string SpaceOut(this IEnumerable<int> list)
    {
        if (list.Count()==)) return string.Empty;

        var res = new StringBuilder();

        list.Take(list.Count() - 1).ToList().ForEach(i => res.Append(i.ToString() + " "));
        res.Append(list.Last().ToString());

        return res.ToString();
    }

答案 6 :(得分:0)

string result = list.Aggregate("", (str, i) => str + " " + i).TrimStart(' ');

答案 7 :(得分:0)

使用LINQ并累积:

string res = list.Select(x => x.ToString()).Aggregate("", (a,b) => a + " " + b);

并保存一个中间数组(但是对于大型列表会创建O(n)垃圾字符串)。