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

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

新規登録して質問してみよう
ただいま回答率
85.50%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

C#

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

Q&A

解決済

2回答

9620閲覧

二次元配列にてのforeachの挙動について

doron

総合スコア152

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

C#

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

0グッド

0クリップ

投稿2016/01/16 06:48

二次元配列においてのforeachの挙動を教えて下さい。
あとforeachはforより速いんですか?

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

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

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

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

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

Lhankor_Mhy

2016/01/16 08:06

回答してから気づいたんですが、javascriptとC#タグがありますね。どっちのことですか?
guest

回答2

0

C#の場合ですが
配列のforeachについてはこちらを参照のこと
たぶんmonoでも同じ。
速度については配列ならばforによる添え字のほうが早いと思います。
foreachは可読性が良くクールではありますが、大量にループさせる場合はIEnumerableの実装によってオーバヘッドが気になるかもしれません。
特にゲームのようなフレーム内で処理する局面ではガベージコレクションの発生(スパイク)はカクツキの原因となるため注意が必要かと思います。

また、以下の記事のようにハマりポイントがありそうなのでフレーム内でのループ処理はforループを使ってます。
unityでのパフォーマンスに関する記事(英語)
ちょっと古いmonoのfoeachがらみの記事(英語)

投稿2016/01/16 09:05

編集2016/01/16 09:09
K.iijima

総合スコア103

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

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

0

ベストアンサー

javascriptの場合について回答します。

二次元配列は「配列の配列」ですので、ループごとに配列が回ってきます。各要素にアクセスしたいなら二重で回す必要があります。つまりforで回す時と同様ってことです。

ベンチ結果はこうでしたが、環境や処理内容によって変わるのでは。

javascript

1var arr = [ 2 [1,2,3], 3 [4,5,6], 4 [7,8,9] 5]; 6 7function test_foreach(){ 8 var str = ''; 9 arr.forEach(function(row){ 10 row.forEach(function(elm){ 11 str += elm; 12 }); 13 }); 14} 15function test_for(){ 16 var str = ''; 17 for (var i = 0; i<arr.length; i++){ 18 for (var j = 0; j<arr[i].length; j++){ 19 str += arr[i][j]; 20 } 21 } 22} 23 24function benchtest(f, times){ 25 var start = new Date(); 26 for (var i = 0; i<times; i++){ 27 f(); 28 } 29 return new Date() - start; 30} 31 32benchtest(test_foreach,100000); // 89 33benchtest(test_for,100000); // 580

投稿2016/01/16 08:04

編集2016/01/16 08:07
Lhankor_Mhy

総合スコア35865

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問