---
title: Hash join
id: 5956795bc9e2c415eb244de1
localeTitle: 5956795bc9e2c415eb244de1
challengeType: 5
---
## Description
Una unión interna es una operación que combina dos tablas de datos en una tabla, basada en valores de columna coincidentes. La forma más sencilla de implementar esta operación es el algoritmo de unión de bucle anidado , pero una alternativa más escalable es el algoritmo de combinación de hash . Implemente el algoritmo de "combinación hash" y demuestre que pasa el caso de prueba que se indica a continuación. Debe representar las tablas como estructuras de datos que se sienten naturales en su lenguaje de programación. El algoritmo "hash join" consta de dos pasos: En el pseudocódigo, el algoritmo podría expresarse como sigue:
sea A = la primera tabla de entrada (o idealmente, la más grande)
sea B = la segunda tabla de entrada (o idealmente, la más pequeña)
sea j A = el ID de la columna de unión de la tabla A
sea j B = unirse a la columna ID de la tabla B
dejar M B = un multimapa para la asignación de valores individuales a varias filas de la tabla B (comienza vacío)
dejar C = la tabla de salida (comienza vacío)
para cada fila b en la tabla B:
coloque b en el multimap M B debajo de la tecla b (j B )
para cada fila a en la tabla A:
para cada fila b en el multimap M B debajo de la tecla a (j A ):
sea c = la concatenación de la fila ay fila b
coloca la fila c en la tabla C
Entrada
|
Salida
A. Edad | Un nombre | B. Caracter | B. nemesis |
---|---|---|---|
27 | Jonás | Jonás | Ballenas |
27 | Jonás | Jonás | Arañas |
18 | Alan | Alan | Fantasmas |
18 | Alan | Alan | Zombies |
28 | Gloria | Gloria | Buffy |
28 | Alan | Alan | Fantasmas |
28 | Alan | Alan | Zombies |
El orden de las filas en la tabla de salida no es significativo.
Si está utilizando matrices indexadas numéricamente para representar filas de la tabla (en lugar de referirse a las columnas por su nombre), podría representar las filas de salida en la forma [[27, "Jonah"], ["Jonah", "Whales"]]
.
hashJoin
es una función.
testString: 'assert(typeof hashJoin === "function", "hashJoin
is a function.");'
- text: ' hashJoin([{ age: 27, name: "Jonah" }, { age: 18, name: "Alan" }, { age: 28, name: "Glory" }, { age: 18, name: "Popeye" }, { age: 28, name: "Alan" }], [{ character: "Jonah", nemesis: "Whales" }, { character: "Jonah", nemesis: "Spiders" }, { character: "Alan", nemesis: "Ghosts" }, { character:"Alan", nemesis: "Zombies" }, { character: "Glory", nemesis: "Buffy" }, { character: "Bob", nemesis: "foo" }])
debe devolver [{"A_age": 27,"A_name": "Jonah", "B_character": "Jonah", "B_nemesis": "Whales"}, {"A_age": 27,"A_name": "Jonah", "B_character": "Jonah", "B_nemesis": "Spiders"}, {"A_age": 18,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Ghosts"}, {"A_age": 18,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Zombies"}, {"A_age": 28,"A_name": "Glory", "B_character": "Glory", "B_nemesis": "Buffy"}, {"A_age": 28,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Ghosts"}, {"A_age": 28,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Zombies"}]
'
testString: 'assert.deepEqual(hashJoin(hash1, hash2), res, "hashJoin([{ age: 27, name: "Jonah" }, { age: 18, name: "Alan" }, { age: 28, name: "Glory" }, { age: 18, name: "Popeye" }, { age: 28, name: "Alan" }], [{ character: "Jonah", nemesis: "Whales" }, { character: "Jonah", nemesis: "Spiders" }, { character: "Alan", nemesis: "Ghosts" }, { character:"Alan", nemesis: "Zombies" }, { character: "Glory", nemesis: "Buffy" }, { character: "Bob", nemesis: "foo" }])
should return [{"A_age": 27,"A_name": "Jonah", "B_character": "Jonah", "B_nemesis": "Whales"}, {"A_age": 27,"A_name": "Jonah", "B_character": "Jonah", "B_nemesis": "Spiders"}, {"A_age": 18,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Ghosts"}, {"A_age": 18,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Zombies"}, {"A_age": 28,"A_name": "Glory", "B_character": "Glory", "B_nemesis": "Buffy"}, {"A_age": 28,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Ghosts"}, {"A_age": 28,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Zombies"}]
");'
```