JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで2つのハッシュテーブルを結合する方法

プログラミングをしていると、複数のコンテナを結合関数でまとめ、新しいコンテナとして取得したい場面がよくあります。ここでは、2つのHashTableを受け取り、すべての値を含む新しいHashTableを返す静的メソッドjoinを実装します。シンプルにするため、両方のテーブルに同じキーが存在する場合は、第2引数のHashTableの値が第1引数の値を上書きする仕様とします。

実装例

static join(table1, table2) {
    // 両方の引数がHashTableであることを確認
    if(!table1 instanceof HashTable || !table2 instanceof HashTable) {
        throw new Error("Illegal Arguments")
    }

    let combo = new HashTable();
    table1.forEach((k, v) => combo.put(k, v));
    table2.forEach((k, v) => combo.put(k, v));
    return combo;
}

このメソッドは、まず新しい空のHashTableを作成し、forEachを使って2つのテーブルのすべてのキーと値を順番に挿入していきます。同じキーが両方に存在する場合は、後から挿入される第2引数の値で上書きされるため、意図した通りの結合結果が得られます。

なお、引数チェックの部分には注意点があります。!table1 instanceof HashTableは演算子の優先順位により(!table1) instanceof HashTableと解釈され、常にfalseになってしまいます。意図どおりに型チェックを行うには、!(table1 instanceof HashTable)のように括弧を付けるのが正しい書き方です。

動作確認

以下のコードでこのメソッドをテストできます。

let ht1 = new HashTable();

ht1.put(10, 94);
ht1.put(20, 72);
ht1.put(30, 1);

let ht2 = new HashTable();

ht2.put(21, 6);
ht2.put(15, 21);
ht2.put(32, 34);

let htCombo = HashTable.join(ht1, ht2)

htCombo.display();

出力結果

このコードを実行すると、次のような出力が得られます。

0:
1:
2:
3:
4: { 15: 21 }
5:
6:
7:
8: { 30: 1 }
9: { 20: 72 }
10: { 10: 94 } --> { 21: 6 } --> { 32: 34 }

出力を見ると、2つのハッシュテーブルのすべてのエントリが衝突チェーンとして正しく1つのテーブルに格納されていることが確認できます。このように静的メソッドとしてjoinを用意しておけば、どのHashTableインスタンスからでも呼び出せるため、データ結合の処理を簡潔に再利用できます。

  1. JavaScriptで2つのオブジェクトをマージする方法を解説

    JavaScriptでは、スプレッド構文(...)を使うことで、2つのオブジェクトを簡単に1つにマージ(結合)できます。各オブジェクトの前に「...」を付けて新しいオブジェクトリテラル内に展開するだけで、すべてのプロパティが統合されたオブジェクトが生成されます。以下に、2つのJavaScriptオブジェクトをマージするコードの例を示します。コード例<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=dev

  2. ハッシュテーブルの仕組みを徹底解説!ハッシュ関数・バケット・衝突処理の基礎

    私が特に好きなデータ構造のひとつがハッシュテーブルです。シンプルでありながら非常に強力だからです。 キーと値のペアを効率的に保存できる手段として、あなたもすでに使ったことがあるかもしれません。 実は、ハッシュテーブルの実装には学ぶ価値のある興味深いコンピュータサイエンスの概念がたくさん詰まっています。この記事では、その仕組みを一緒に掘り下げていきましょう! バケットとハッシュ関数 ハッシュテーブルの基本的な考え方は、キーでインデックス付けされたデータに対して、O(1) の計算量で効率的にアクセスできるようにすることです。 おさらいとして、Ruby でハッシュテーブルを使うと次のような見た目にな