2

コードを実行するには、2 つの方法があります。このコードは、基本的に 3 つの配列のすべての値をリセットします。そのうちの 2 つは int 配列で、1 つはブール値です。

選択肢 1

for (i = 0; i < array1.length; i++)
    array1[i] = 0;

for (i = 0; i < array2.length; i++)
    array2[i] = 0;

for (i = 0; i < array3.length; i++)
    array3[i] = false;

選択肢 2

int limit = <assign the greatest of the array lengths>

for (i = 0; i < limit; i++)
{
    if (i < array1.length)
        array1[i] = 0;

    if (i < array2.length)
        array2[i] = 0;

    if (i < array3.length)
        array3[i] = false;
}

これらのうち、どれがより速いでしょうか?配列はさまざまな長さを持つことができ、互いに関係がないことを考えると。

ここで本当に良い議論があります。最初にリストされた答えは、javascriptで配列が実際に何を意味するのかをよく説明しています。気になる人は要チェック!

4

2 に答える 2

6

このバージョンは、ほぼ確実に高速になります。また、読みやすく短くなります。どちらも速度よりもはるかに重要な属性です (99% 以上の確率)。

for (i = 0; i < array1.length; i++)
    array1[i] = 0;

for (i = 0; i < array2.length; i++)
    array2[i] = 0;

for (i = 0; i < array3.length; i++)
    array3[i] = false;

一般に、メモリ内で最近アクセスしたデータに近いデータにアクセスする方が高速です。

このバージョンは、2 番目のバージョンで発生する追加の分岐の影響も受けません。

十分に高度なコンパイラは、2 番目のバージョンを最初のバージョンに変換します。

ベンチマーク:マイクロベンチマークは、最初にプログラム全体をプロファイリングしないと 100% 役に立ちません。パフォーマンス測定値は役に立たないと思うので、提供していません。

于 2012-08-23T10:07:20.337 に答える
1
function reset_array(array, value) {
  var len = array.length;
  array.length = 0;
  while (len--) array.push(value);
}

reset_array(array1, 0);
reset_array(array2, 0);
reset_array(array3, false);
于 2012-08-23T10:10:04.830 に答える