-1

オイラー問題 11 では、20x20 グリッドを 2D 整数配列に変換したいと考えています。

各行の数字はスペースで区切られ、行は改行で区切られます。

例:
34 34 34 34 34 34 34 34
34 34 34
34 34
34 34 34

表示されているグリッドは文字列だと思います。コピーして貼り付けてから、配列を作成したいと思います。複数の行文字列は許可されていないようです。グリッドをファイルとして保存し、それを配列に読み込む方が簡単でしょうか?
私は問題を解決することを求めているのではなく、配列を作成するためのヘルプを探しているだけです。、、および
を使用して、各行を 1 次元配列に変換する方法を見つけました.Split().Select().ToArray()

int[] rowOne = "34 34 34 34".Split(' ').Select(int.Parse).ToArray();  

私はまだ C# の初心者であり、グリッド全体を 2D 配列に変換する最も簡単な方法がわかりません。

4

2 に答える 2

2

複数行の文字列を使用できます:

    var multilineString = @"
34 34 34
34 34 34";

この後、提案したものと同様に進めることができます:

string[] rows = multilineString.Split('\n');
int[] rowOne = rows[0].Split(' ').Select(int.Parse).ToArray();

2D 配列を取得するには:

string[] rows = multilineString.Split(
                  new[] {'\n'},
                  StringSplitOptions.RemoveEmptyEntries);

int[][] array = rows.Select(row => row
                                   .Split(' ')
                                   .Select(int.Parse)
                                   .ToArray())
                    .ToArray();
于 2013-08-16T00:23:58.863 に答える
1

グリッドが grid という文字列に格納されているとしましょう

string grid = @"34 34 34 34
            34 34 34 34
            34 34 34 34
            34 34 34 34";

var myArray = grid
    .Split('\n')
    .Select(t => t.Split(' ')
                    .Where((t1) =>
                    {
                        int i = 0;
                        return int.TryParse(t1, out i);
                    })
                    .Select(int.Parse).ToArray()
            ).ToArray();

ここのコードは、最初に改行文字に基づいて分割され、次にスペース文字に基づいて分割されます。「Where」への呼び出しは、true または false を返す匿名メソッドを送信し、値が整数であるかどうかを解析して、整数のみを選択しようとします。

var は静的に型指定されるため、式が返すものは何でも myArray の型になります。これは実際には実行時ではなくコンパイル時に発生します。int [][] myArray = ... と同じように簡単に言うことができます。

テスト

for (int i = 0; i < myArray.Length; i++)
{
    for (int j = 0; j < myArray[i].Length; j++)
    {
        Console.Write(myArray[i][j].ToString() + ' ');
    }
    Console.WriteLine();
}
于 2013-08-16T00:29:57.913 に答える