二次元配列においてのforeachの挙動を教えて下さい。
あとforeachはforより速いんですか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
C#の場合ですが
配列のforeachについてはこちらを参照のこと
たぶんmonoでも同じ。
速度については配列ならばforによる添え字のほうが早いと思います。
foreachは可読性が良くクールではありますが、大量にループさせる場合はIEnumerableの実装によってオーバヘッドが気になるかもしれません。
特にゲームのようなフレーム内で処理する局面ではガベージコレクションの発生(スパイク)はカクツキの原因となるため注意が必要かと思います。
また、以下の記事のようにハマりポイントがありそうなのでフレーム内でのループ処理はforループを使ってます。
unityでのパフォーマンスに関する記事(英語)
ちょっと古いmonoのfoeachがらみの記事(英語)
投稿2016/01/16 09:05
編集2016/01/16 09:09総合スコア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総合スコア35865
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。