Anonymous user
Hash join: Difference between revisions
→{{header|Rust}}: update and genericize
(→{{header|Rust}}: update and genericize) |
|||
Line 2,505:
=={{header|Rust}}==
<lang rust>use std::collections::HashMap;
use std::hash::Hash;
// If you know one of the tables is smaller, it is best to make it the second parameter.
fn hash_join<A, B, K>(first: &[(K, A)], second: &[(K, B)]) -> Vec<(A, K, B)>
where
K: Hash + Eq + Copy,
A: Copy,
B: Copy,
{
fn main() {▼
let table_a = vec![▼
(27, "Jonah"), (18, "Alan"), (28, "Glory"), ▼
(18, "Popeye"), (28, "Alan")▼
];▼
];▼
// hash phase
for &(key, val_a) in second {
▲ let mut h = HashMap::new();
// collect all values by their keys, appending new ones to each existing entry
}
let mut result = Vec::new();
// join phase
for
if let Some(vals) =
println!("{:?} {:?}", a, b);▼
}▼
}
}
result
}
</lang>▼
▲fn main() {
let table1 = [("Jonah", 27), ("Alan", 18), ("Glory", 28), ("Popeye", 18), ("Alan", 28)];
▲ ];
let result = hash_join(&table1, &table2);
println!("Age | Character Name | Nemesis");
println!("----|----------------|--------");
for (age, name, nemesis) in result {
▲}</lang>
{{out}}
<pre>Age | Character Name | Nemesis
----|----------------|--------
27 | Jonah | Spiders
28 | Alan | Ghosts
28 | Alan | Zombies</pre>
=={{header|Scala}}==
|