Hos*_*Aly 3 c# linq linq-to-objects
我有一个double[][]我想要转换为CSV字符串格式(即一行中的每一行,以逗号分隔的行元素).我这样写的:
public static string ToCSV(double[][] array)
{
return String.Join(Environment.NewLine,
Array.ConvertAll(array,
row => String.Join(",",
Array.ConvertAll(row, x => x.ToString())));
}
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方式来使用LINQ编写这个?
(我知道,可以使用临时变量来使这看起来更好,但这种代码格式更好地传达了我正在寻找的东西.)
你可以,但我不会亲自做所有的行 - 我会使用迭代器块:
public static IEnumerable<string> ToCSV(IEnumerable<double[]> source)
{
return source.Select(row => string.Join(",",
Array.ConvertAll(row, x=>x.ToString())));
}
Run Code Online (Sandbox Code Playgroud)
这将返回每一行(调用者可以WriteLine有效地等,而无需缓冲所有内容).它现在也可以从任何double[]行来源调用(包括但不限于锯齿状数组).
此外 - 使用局部变量,您可以使用StringBuilder每个线稍微便宜一点.
要立即返回整个字符串,我会优化它以使用单个StringBuilder字符串进行所有字符串工作; 有点啰嗦,但效率更高(中间字符串少得多):
public static string ToCSV(IEnumerable<double[]> source) {
StringBuilder sb = new StringBuilder();
foreach(var row in source) {
if (row.Length > 0) {
sb.Append(row[0]);
for (int i = 1; i < row.Length; i++) {
sb.Append(',').Append(row[i]);
}
}
}
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1178 次 |
| 最近记录: |