c# 二次元のリストから二次元配列への変換について


C#のString型の二次元のリストから，double型の二次元配列への変換に苦戦しています。  
なお，ここで変換されるものは，行，列の数が等しい正方行列です。  
お手伝いいただければ幸いです。

よろしくお願いします。




`List<List<string>>`を`double[,]`に変換したいということでしょうか。  
でしたら基本的には以下のような処理になります。

[code]

    // List<List<string>> list;
    var rowCount = list.Count;
    var colCount = rowCount;
    
    var r = new double[rowCount, colCount];
    
    for (int y = 0; y < rowCount; y++)
    {
        var src = list[y];
        for (int x = 0; x < colCount; x++)
        {
            r[y, x] = double.Parse(src[x]);
        }
    }
    
[/code]

加えて考慮すべきポイントを列挙すると以下のようなものがあります。

  * 二次元配列の添字の順番。配列をネイティブAPIに渡す場合は要注意。行を先にした場合( **行優先** )、メモリ上には`r[0 ,0]`, `r[0, 1]`, …, `r[0, colCount - 1]`, `r[1, 0]`, …の順で値が並ぶ。
  * `list[y]`が`null`である場合のエラー処理。
  * `list[y]`の要素数が想定より少ない場合のエラー処理。
  * `list[y][x]`が数値でない場合のエラー処理。無視する場合は`double.TryParse`を使用する。
  * 正方行列でない場合の`colCount`の求め方。`list[0].Count`もしくは`list.Max(e => e.Count)`。




`List<List<string>>`を`double[,]`に変換したいということでしょうか。  
でしたら基本的には以下のような処理になります。

[code]

    // List<List<string>> list;
    var rowCount = list.Count;
    var colCount = rowCount;
    
    var r = new double[rowCount, colCount];
    
    for (int y = 0; y < rowCount; y++)
    {
        var src = list[y];
        for (int x = 0; x < colCount; x++)
        {
            r[y, x] = double.Parse(src[x]);
        }
    }
    
[/code]

加えて考慮すべきポイントを列挙すると以下のようなものがあります。

  * 二次元配列の添字の順番。配列をネイティブAPIに渡す場合は要注意。行を先にした場合( **行優先** )、メモリ上には`r[0 ,0]`, `r[0, 1]`, …, `r[0, colCount - 1]`, `r[1, 0]`, …の順で値が並ぶ。
  * `list[y]`が`null`である場合のエラー処理。
  * `list[y]`の要素数が想定より少ない場合のエラー処理。
  * `list[y][x]`が数値でない場合のエラー処理。無視する場合は`double.TryParse`を使用する。
  * 正方行列でない場合の`colCount`の求め方。`list[0].Count`もしくは`list.Max(e => e.Count)`。

