LinQでも使える2次元配列

2次元配列でLinQを使ったら1次元配列扱いになって不便だったので、LinQでも(2次元座標が)使える2次元配列のクラスを作りました。

 

 

実装 

 

使い方

LinQで2次元配列の要素の2次元座標を取得できます。

以下は使用例です。

// 幅10, 高さ10の二次元配列を作成
var width = 10;
var height = 10;
var ary = new Array2D<int>( width, height );

// 各要素に0~2のランダムな値を代入
for( int y = 0; y < height; y++ ) {
    for( int x = 0; x < width; x++ ) {
        ary.Set( x, y, Random.Range( 0, 3 ) );
    }
}

// "xが0"の要素に3を代入

ary.Set( elem => elem.x == 0, 3 );

// "xが5,またはyが3" の要素を全取得
var ary2 = ary.Where( elem => elem.x == 5 || elem.y == 3 );

// "valueが1" の要素を全取得
var ary3 = ary.Where( elem => elem.value == 1 );

// "xが5,またはyが3" かつ "valueが1"の全要素に
foreach( var elem in ary2.Union(ary3) ) {
    // なんかする
}

 

参考記事

qiita.com