【C#】【数独】オブジェクトを複製する

前回までの状況はこちら。

最新ソースはこちら(gitHub)

https://github.com/takishita2nd/sudoku

仮置きロジックに必要な処理を実装していきます。

まずは、解析状況のデータの複製を作るところです。

仮置き解析して、矛盾があれば、そのデータを破棄するようにします。

オブジェクトの複製に=演算子を使用してはいけません。

これはオブジェクトの移動です。

C言語的に言えば、ポインタを移しているだけです。

なので、オブジェクトをnewで作成して、同じデータを持たせるように設定しなければなりません。

まずは、Squareクラス。

    class Square
    {
        // 確定した数字
        private int _value;
        // 確定したかどうか
        private bool _confirmed;

        public Square()
        {
            this._value = 0;
            this._confirmed = false;
        }

        public Square(int val)
        {
            this._value = val;
            if(val == 0)
            {
                this._confirmed = false;
            }
            else
            {
                this._confirmed = true;
            }
        }

中略

        public Square Clone()
        {
            return new Square(_value);
        }
    }

Clone()で同じデータを持つオブジェクトを作成して返しています。

次に、Sudokuクラス。

    class Sudoku
    {
        private Square[,] _square;

中略

        private Square[,] makeClone(Square[,] _square)
        {
            Square[,] ret = new Square[9, 9];
            for(int i = 0; i < 9; i++)
            {
                for(int j = 0; j < 9; j++)
                {
                    ret[i, j] = _square[i, j].Clone();
                }
            }

            return ret;
        }
    }

Square[]をnewで作成し、SquareのCloneを設定し、返しています。

これでこの関数の戻り値は、完全なSquare[,]の複製が作成されます。

次回は実際に仮置きをするロジックを考えます。

「【C#】【数独】オブジェクトを複製する」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください