RosettaCodeData/Task/Hash-join/Rust/hash-join.rust
2017-09-25 22:28:19 +02:00

26 lines
713 B
Text

use std::collections::HashMap;
fn main() {
let table_a = vec![
(27, "Jonah"), (18, "Alan"), (28, "Glory"),
(18, "Popeye"), (28, "Alan")
];
let table_b = vec![
("Jonah", "Whales"), ("Jonah", "Spiders"), ("Alan", "Ghosts"),
("Alan", "Zombies"), ("Glory", "Buffy")
];
// hash phase
let mut h = HashMap::new();
for (i, a) in table_a.iter().enumerate() {
h.entry(a.1).or_insert_with(Vec::new).push(i);
}
// join phase
for b in table_b {
if let Some(vals) = h.get(b.0) {
for &val in vals {
let a = table_a.get(val).unwrap();
println!("{:?} {:?}", a, b);
}
}
}
}