バグ の日記

[C#]多次元配列

パーマリンク by バグ on 2013年8月23日(金) 11:40

多次元配列のインスタンスの作成って、どう書いてます?
例えば、Testという名前のクラスがあるとしますよね。

コード[C#]: 全て選択
1
2
3
4
5
Test[] test = new Test[100];
foreach (var t in test)
{
    t = new Test();
}


んで、こんな感じで書ければ、まだそこそこ美しさを保てる(超主観)のですが、この書き方は許されていません。
なので、仕方なく下記のような書き方に変更する訳です。

コード[C#]: 全て選択
1
2
3
4
5
Test[] test = new Test[100];
foreach (var i in Enumerable.Range(0, test.Length))
{
    test[i] = new Test();
}


これはこれで悪くはないのですが、1次元配列ならまだしも、これが多次元配列だとちょっと悲惨です。

コード[C#]: 全て選択
1
2
3
4
5
6
7
8
Test[,] test = new Test[100, 150];
foreach (var x in Enumerable.Range(0, test.GetLength(0)))
{
    foreach (var y in Enumerable.Range(0, test.GetLength(1)))
    {
        test[x, y] = new Test();
    }
}


個人的に多重ループを乱用するのは極力避けたいなぁ・・・。
そんな訳で小細工です。

コード[C#]: 全て選択
1
2
3
4
5
Test[,] test = new Test[100, 150];
var ex = Enumerable.Range(0, test.GetLength(0));
var ey = Enumerable.Range(0, test.GetLength(1));
var q = from x in ex from y in ey select test[x, y] = new Test();
foreach (var t in q) ;


美し・・・くはないけど、なんとなくスッキリした気はする(笑)
まぁ、こういう方法もありますよっていう程度で。

コメント

RE: [C#]多次元配列

パーマリンク by naohiro19 on 2013年8月23日(金) 14:40

配列(C# によるプログラミング入門)の方法でもOKなようです。

RE: [C#]多次元配列

パーマリンク by バグ on 2013年8月23日(金) 15:11

その方法だと要素が多くなると大変じゃないですか?

RE: [C#]多次元配列

パーマリンク by YuO on 2013年8月29日(木) 23:10

T4テンプレートで外に出すのも一つの方法です。
C#使ってC#のコードを生成できます。
添付ファイル
ConsoleApplication1.zip
Visual C# 2012 Express Solution
(5.34 KB) ダウンロード数: 105 回

RE: [C#]多次元配列

パーマリンク by バグ on 2013年8月30日(金) 08:54

おぉ・・・こんな方法もあるのですね。
知りませんでした、勉強になります(*O*)