从List返回字符串的最佳方式是什么 好的,是的,我知道我可以做类似
的事情public string Convert(List<int> something)
{
var s = new StringBuilder();
foreach(int i in something)
s.AppendFormat("{0} ", i);
return s.ToString();
}
但我确信有一种方法可以用lambdas来做到这一点 我还试图附加到一个字符串构建器,但这没有做什么预期
答案 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)垃圾字符串)。