Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Linq将制表符分隔的文件读入多维数组?_C#_Linq_Tab Delimited - Fatal编程技术网

C# 如何使用Linq将制表符分隔的文件读入多维数组?

C# 如何使用Linq将制表符分隔的文件读入多维数组?,c#,linq,tab-delimited,C#,Linq,Tab Delimited,对于以下以制表符分隔的文件,我试图将其保存在double[][]csvArray 列数是最终的(5),但行数是动态的 1,717.72 1,728.89 1,712.61 1,728.89 1,707.11 1,701.19 1,704.11 1,702.05 1,706.98 1,697.19 1,685.41 1,688.68 1,694.07 1,695.71 1,687.20 1,641.05 1,649.27

对于以下以制表符分隔的文件,我试图将其保存在
double[][]csvArray

列数是最终的(5),但行数是动态的

1,717.72    1,728.89    1,712.61    1,728.89    1,707.11
1,701.19    1,704.11    1,702.05    1,706.98    1,697.19
1,685.41    1,688.68    1,694.07    1,695.71    1,687.20
1,641.05    1,649.27    1,658.06    1,658.58    1,648.09
1,673.69    1,668.34    1,663.90    1,673.42    1,662.16
1,682.32    1,669.54    1,671.33    1,681.02    1,668.81
1,688.12    1,681.44    1,684.90    1,688.57    1,672.60
1,686.02    1,690.76    1,697.13    1,698.13    1,690.35
1,704.92    1,696.22    1,696.74    1,701.17    1,688.74
1,686.78    1,683.61    1,677.03    1,687.88    1,674.40
1,705.94    1,704.90    1,715.58    1,716.91    1,700.25
1,659.22    1,660.46    1,658.69    1,664.98    1,655.62
1,622.31    1,621.94    1,632.78    1,633.61    1,613.91
除了对整个矩阵进行迭代之外,是否还有一些LINQ表达式可以得到这样好且干净的结果?

在LINQ的帮助下,您可以这样做:

using System.Globalization;

var csvArray = File
  .ReadLines(@"C:\MyData.csv") // assuming that data is in the file
  .Select(line => line
    .Split('\t')
    .Select(item => Double.Parse(item, CultureInfo.InvariantCulture))
    .ToArray()) 
  .ToArray();
请注意,当使用锯齿状数组(
double[][]
)时,您不需要知道列的确切数目(在您的情况下为5列)

这将起作用

string str = 
  @"1,717.72    1,728.89    1,712.61    1,728.89    1,707.11    
    1,717.72    1,728.89    1,712.61    1,728.89    1,707.11";

var doubles = str
  .Split("\n\r".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
  .Select(item => item
    .Split("\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
    .Select(d => double.Parse(d))
    .ToArray())
  .ToArray();

我想知道您是否可以谈谈使用LINQ vs矩阵迭代的效率。我对林克本人是新手。对
ToArray()
的两次调用让我觉得我做得太多了。这段代码非常有效:文件读取(这是你无法避免的)是其中最消耗的部分。你确定它是在编译吗?“我正在获取”不包含“不变量”的定义添加
使用System.Globalization
s将其设置为double[][]将导致所有数据加载到内存中。考虑使用<代码> InEdabess < /代码>(删除<代码> toAARAY()/代码>调用)EH,<代码>…>代码>似乎是不正确的,<代码>项目。