将字符串数组转换为多维double

时间:2019-03-29 23:02:57

标签: c# windows

我需要从文件中读取一个矩阵以double [,]。到现在为止,可以将文件读取为string []。数据结构如下所示: enter image description here

但是转换无效。

我已经尝试了很多stackoverflow文章,但是总是失败,因为“输入字符串的格式不正确”。重要的是这些值都是双精度值,并用三个空格分隔。

我这样读取文件:

public function products()
{
    return $this->belongsToMany('App\Product', 'order_products', 'order_id', 'product_id');
}

1 个答案:

答案 0 :(得分:1)

您可以通过多种方式执行此操作,这取决于您是否需要锯齿状数组或多维数组。

可能有更简洁的方法,但是,您可以看到这个主意。

锯齿状

var jaggedArray = File.ReadAllLines(@"d:\right.txt")
                        .Where(x => !string.IsNullOrWhiteSpace(x))
                        .Select(x => x.Split(new[]{' '},StringSplitOptions.RemoveEmptyEntries)
                                     .Select(double.Parse)
                                     .ToArray())
                        .ToArray();

多维

var lines = File.ReadAllLines(@"d:\right.txt")
                  .Where(x => !string.IsNullOrWhiteSpace(x))
                  .Select(x => x.Split(new[]{' '},StringSplitOptions.RemoveEmptyEntries)
                               .Select(double.Parse)
                               .ToList())
                  .ToList();

var h = lines.Count();
var w = lines.Max(x => x.Count);
var multiArray = new double[h, w];

for (var i = 0; i < lines.Count; i++)
   for (var j = 0; j < lines[i].Count; j++)
      multiArray[i, j] = lines[i][j];

注意 :完全未经测试,对于该代码所造成的伤害或损害,我不承担任何责任。
注释2 :没有错误检查或容错功能,如果文件中有垃圾,很可能会抛出

更新

  

有没有一种方法可以调试/修复该问题?也许问题在于   值用3个空格分隔,而不仅仅是1个空格?有没有   LINQ语句中解决此问题的方法?

是的,如果使用StringSplitOptions.RemoveEmptyEntries的多个空格应该可以工作

Split(new [] {' '},StringSplitOptions.RemoveEmptyEntries)

不过请注意,这实际上是假设每个分隔的值都可以转换为double,并且没有空行(即使在文件末尾)

您可以使用 linq 语句中包含的类似内容来解决空白行问题

File.ReadAllLines(@"right.txt")
    .Where(x => !string.IsNullOrWhiteSpace(x))
    ...