gpt4 book ai didi

c# - 我可以使用 LINQ 更优雅地重写它吗?

转载 作者:行者123 更新时间:2023-11-30 13:43:14 27 4
gpt4 key购买 nike

我有一个 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())));
}

是否有更优雅的方式使用 LINQ 编写此代码?

(我知道,可以使用临时变量使它看起来更好,但这种代码格式更好地传达了我正在寻找的内容。)

最佳答案

可以,但我个人不会一次完成所有行——我会使用迭代器 block :

public static IEnumerable<string> ToCSV(IEnumerable<double[]> source)
{
return source.Select(row => string.Join(",",
Array.ConvertAll(row, x=>x.ToString())));
}

这将返回每一行(调用者然后可以有效地 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();
}

关于c# - 我可以使用 LINQ 更优雅地重写它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/585215/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com