ハッシュテーブル(オブジェクト)対配列


皆さんこんにちは.
今日は、データを追加したり、データを取得したり、データを削除したりするために、ほとんどのアプリケーションで使われていたデータ構造についてお話したかったです.しかし、私たちのほとんどは、配列のユースケースに精通していると仮定しています.しかし、場面の後で起こることは全く異なります.
このポストの終わりまでには、どのデータ構造が選択するかについて良い決定をするのに十分な知識があります.

データ


まず、両方のケースで使用するデータをあなたに見せたかったです.

これは、私が世界のトップ映画についてWikipediaから得るランダムなデータです.
私たちが実装したいのは、このデータは、映画の純総収入を取得格納されます.例えば、私は冷凍の総収入を得たいなら、1290000000を得ます.

アレイ


さて、ほとんどの人が精通している配列から始めましょう.上記のデータを配列に格納すると、次のようになります.
let arrayMoviesData = [];

arrayMoviesData.push(["Avengers: Endgame", "2,797,800,564"]);
arrayMoviesData.push(["Avatar", "2,790,439,000"]);
arrayMoviesData.push(["Titanic", "2,194,439,542"]);
arrayMoviesData.push(["Star Wars: The Force Awakens", "2,068,223,624"]);
arrayMoviesData.push(["Avengers: Infinity War", "2,048,359,754"]);
arrayMoviesData.push(["Jurassic World", "1,671,713,208"]);
arrayMoviesData.push(["The Lion King", "1,656,943,394"]);
arrayMoviesData.push(["The Avengers", "1,518,812,988"]);
arrayMoviesData.push(["Furious 7", "1,516,045,911"]);
arrayMoviesData.push(["Frozen II", "1,450,026,933"]);
arrayMoviesData.push(["Avengers: Age of Ultron", "1,402,805,868"]);
arrayMoviesData.push(["Black Panther", "1,347,280,838"]);
arrayMoviesData.push(["Harry Potter and the Deathly Hallows – Part 2", "1,342,025,430"]);
arrayMoviesData.push(["Star Wars: The Last Jedi", "1,332,539,889"]);
arrayMoviesData.push(["Jurassic World: Fallen Kingdom", "1,309,484,461"]);
arrayMoviesData.push(["Frozen", "1,290,000,000"]);
arrayMoviesData.push(["Beauty and the Beast", "1,263,521,126"]);
arrayMoviesData.push(["Incredibles 2", "1,242,805,359"]);
最初に、私は配列と呼ばれる空の集合を作りましたarrayMoviesData それからアイテムを追加しました.私が追加した項目に注意してくださいarrayMoviesData も配列自体です.あなたならばconsole.log(arrayMoviesData) それはこのようなものになります.

私がしたかったのは、特定の映画の総収入にアクセスし、そのためのコードは、このように見えるでしょう.
let movie = "Incredibles 2";

for (let index = 0; index < arrayMoviesData.length; index++) {
    if(arrayMoviesData[index][0] === movie){
        console.log(`The gross income of ${arrayMoviesData[index][0]} is ${arrayMoviesData[index][1]}.`)
    }

}
私は、各項目を通過するループを作成している場合の値をチェックしますarrayMoviesData それが映画変数に値と一致するならば、配列.しかし、配列内に18個か100個の項目しかないなら、これは非常に微細で効率的です.
しかし、問題が発生した場合は、配列内の10万と数百万の項目があります.検索したい項目が配列の先頭にある場合は、結果をすばやく見つけますが、項目が配列の末尾にある場合はしばらく時間がかかります.
結論から、配列内の項目を見つけるための平均時間は、配列の項目数に直接比例することがわかります.

hashtables ( object )


HastablesはほとんどJavaScriptで動作するので、オブジェクトにsimliarを働かせます.HashTableにムービーデータを追加するコードは次のようになります.
let objectMoviesData = new Object();

objectMoviesData["Avengers: Endgame"] = "2,797,800,564";
objectMoviesData["Avatar"] = "2,790,439,000";
objectMoviesData["Titanic"] = "2,194,439,542";
objectMoviesData["Star Wars: The Force Awakens"] = "2,068,223,624";
objectMoviesData["Avengers: Infinity War"] = "2,048,359,754";
objectMoviesData["Jurassic World"] = "1,671,713,208";
objectMoviesData["The Lion King"] = "1,656,943,394";
objectMoviesData["The Avengers"] = "1,518,812,988";
objectMoviesData["Furious 7"] = "1,516,045,911";
objectMoviesData["Frozen II"] = "1,450,026,933";
objectMoviesData["Avengers: Age of Ultron"] = "1,402,805,868";
objectMoviesData["Black Panther"] = "1,347,280,838";
objectMoviesData["Harry Potter and the Deathly Hallows – Part 2"] = "1,342,025,430";
objectMoviesData["Star Wars: The Last Jedi"] = "1,332,539,889";
objectMoviesData["Jurassic World: Fallen Kingdom"] = "1,309,484,461";
objectMoviesData["Frozen"] = "1,290,000,000";
objectMoviesData["Beauty and the Beast"] = "1,263,521,126";
objectMoviesData["Incredibles 2"] = "1,242,805,359";
ハッシュはキー/プロパティと値のペアで動作します.この場合、私は映画の名前をkey そして、価値としての総収入.
ハッシュは、ユーザーによって提供され、瞬時に結果を与えるキーの値の正確なジャンプによって動作します.
あなたはそれがどのように速く配列しているのだろうか?
JavaScriptエンジンの特定のハッシュテーブルにデータを追加すると、JavaScriptエンジンがキーのデータを追跡し、ハッシュテーブルに格納されます.だから、このようなものを渡すとき.
objectMoviesData["Incredibles 2"]
これを瞬時に返す1,242,805,359 .
しかし、あなたがこのようなものを渡すとき.
objectMoviesData["fsafaf"];
それは即座には、この任意のキーを格納していない知っているfsafaf , を返します.
配列を考えると、同じように動作しますが、配列でキー/プロパティがインデックスであり、配列のインデックスの値を変更できません.
また、オブジェクトをループしてデータを表示したい場合は、for of 以下のようにループします.
for (const [key, value] of Object.entries(objectMoviesData)) {
    console.log(`The gross income of ${key} is ${value}`)
}

結論


あなたがパフォーマンスを考えるならば、ハッシングは確かに勝ちます.配列は、少量のデータを格納するのに適していますが、データが大きくなったら、ハッシュテーブルに移行する必要があります.
あなたが私が何か間違ったことを言ったかもしれないと思うならば、コメントしてください.私たちは皆ここで学んでいる.
この投稿はkirupa .
これを読むあなたの時間に感謝します.
ハッピーコーディング