質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3171閲覧

二次元以上の配列でインデックスの値を条件にして検索する

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/11/14 09:54

Unityでゲームを製作しています。

GameObject[,,] array=new GameObject[3,3,3];
で定義された3×3×3の3次元配列から「3つのインデックス値のうちどれか1つでも”1”である要素」、例えば[0,0,1]や[1,2,1]なんかをすべて抜き出してそれぞれに処理をしたいです。

目当てとする内容自体は
for (int m = 0; m < 3; m++)
{
for (int n = 0; n < 3; n++)
{
var target = array[1, m, n];
//以下、targetに処理を施す
}
}
これをarray[m,1,n]、array[m,n,1]のパターンでも繰り返してやれば実装できると思うのですが、[1,1,2]のように"1"を複数個ふくむ要素に対して処理を複数回行ってしまうことになりますし、さらに多次元の配列の場合はコードがどんどん長くなってしまいます(そこまでの多次元配列を使う機会がそうあるかはともかくとして)。

そこで質問なのですが、今回のケースに限らず、二次元以上の配列でインデックスの値を条件とする検索は可能ですか?
回答よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2017/11/14 10:25

とりあえずGameObjectは数値にはなり得ないのですが、実際に必要な値は何ですか?(それによっては三次元配列である必要も無いかもしれません)
退会済みユーザー

退会済みユーザー

2017/11/14 12:19

すいません、言葉足らずでした。「インデックスの値」というのは「そのインデックスに格納されている値」ではなく「インデックスの番号そのもの」という意味のつもりです。array[x,y,z]の中からxyzのどれか一つでも”1”番になっている要素を抜き出したいのです。
guest

回答1

0

ベストアンサー

予め組み合わせを列挙しておいて、それをLINQすればいいんじゃないかな。

struct xxx { public int X{get;set;} public int Y{get;set;} public int Z{get;set;} } IEnumerable<xxx> 組み合わせ列挙() { for (int m = 0; m < 3; m++) { for (int n = 0; n < 3; n++) { for (int l = 0; l < 3; l++) { yield return new xxx(){X = m,Y = n ,Z = l} } } } } void XXXXX() { var selected_array = 組み合わせ列挙().Where(n=>n.X == 1 || n.Y = 1 || n.Z == 1) .Select(n=> array[n.X, n.Y, n.Z]); }

こんな感じ。
問題を分割して合成するという感じで、コードの見通しが良くなると思います。

これだと、富豪的な解決法で、いわゆる、for文における、Break文がない状態で、
無駄なループが回るので、「組み合わせ列挙」を工夫するといいですね。

投稿2017/11/14 10:45

編集2017/11/14 11:08
kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/15 09:52

回答ありがとうございます。 インデックスの番号を直接取得することはできないから、あらかじめ番号と対応する変数を用意しておくということですね。 これでうまくいきそうです、ありがとうございましたm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問