【Unity】範囲が無制限な二次元配列
やること
負の方向にも要素を持てて、リサイズ可能な(というか勝手にリサイズされる)二次元配列を実装する。
やりたいこととしてはDictionary<Vector2Int, T>
でいいんだけど、パフォーマンス的にもうちょいマシなものを目指す。
コード
こうやって使う
var array2 = new UnlimitedArray2<string>(0, 0, 8, 8); // 8x8サイズの配列 var array2[1, 2] = "hoge"; // 二次元配列感覚で使う var array2[50, 50] = "fuga"; // 範囲外にアクセスしても勝手にリサイズされる var array2[-1, -1] = "piyo"; // 負の値を入れても動く // 要素をなめる。 // この場合、i : [-1, 50], j : [-1, 50]の範囲をとる。 for (int i=array2.MinX; i<=array2.MaxX; ++i) { for (int j=array2.MinY; j<=array2.MaxY; ++j) { Debug.Log(array2[i, j]); } }
なお
リサイズが起こるSetを連発されると辛くなるのは見えてるんだけど、そのへんは生成時のサイズ指定で良い感じの値を入れておいてほしい。(List
みたいに多めにキャパシティを獲得しておく手はあるんだけど、二乗で利くのでさすがに怖い)