1. ホーム
  2. javascript

[解決済み] オブジェクトのプロパティの最小値/最大値を取得する高速な方法

2022-11-10 18:29:08

質問

javascriptでこのようなオブジェクトを持っています。

{ "a":4, "b":0.5 , "c":0.35, "d":5 }

私の持っているオブジェクトは巨大であり、私は2秒ごとに最小/最大値を取得する必要があるため、プロパティ間の最小値と最大値を取得する高速な方法はありますか?(オブジェクトの値は変化し続ける)。

どのように解決するには?

をすべてループさせることなく、一般的なケースで最大/最小を見つける方法はありません。 n の要素をループすることなく最大値/最小値を求めることはできません(1 から n-1 へと進む場合、要素 n が現在の最大/最小値より大きくない(または小さい)ことをどうやって知ることができますか?)

値が数秒ごとに変化しているとのことですが、どのように変化しているのでしょうか。しかしこの場合でも、変更された値の 1 つが以前の最大/最小値であった場合、それらを再度ループする必要があるかもしれません。

別の選択肢は、これもまた、変更する値の数が少ない場合のみですが、ツリーやヒープのような構造体に値を格納し、新しい値が到着すると、それらを適切に挿入(または更新)することです。しかし、それが可能かどうかは、質問に基づいて明確ではありません。

すべての要素をループしながら与えられたリストの最大/最小要素を取得したい場合、以下のスニペットのようなものを使用することができますが、すべての要素を通過しなければできません。

var list = { "a":4, "b":0.5 , "c":0.35, "d":5 };
var keys = Object.keys(list);
var min = list[keys[0]]; // ignoring case of empty list for conciseness
var max = list[keys[0]];
var i;

for (i = 1; i < keys.length; i++) {
    var value = list[keys[i]];
    if (value < min) min = value;
    if (value > max) max = value;
}