12345678910111213141516171819202122232425262728293031323334353637 |
- #!/usr/bin/ruby
- #
- ## https://rosettacode.org/wiki/Hash_join
- #
- func hashJoin(table1, index1, table2, index2) {
- var a = Arr.new;
- var h = Hash.new;
-
- # hash phase
- table1.each { |s|
- h{s[index1]} := [] -> append(s);
- };
-
- # join phase
- table2.each { |r|
- a += h{r[index2]}.map{[_,r]};
- };
-
- return a;
- }
-
- var t1 = [[27, "Jonah"],
- [18, "Alan"],
- [28, "Glory"],
- [18, "Popeye"],
- [28, "Alan"]];
-
- var t2 = [["Jonah", "Whales"],
- ["Jonah", "Spiders"],
- ["Alan", "Ghosts"],
- ["Alan", "Zombies"],
- ["Glory", "Buffy"]];
-
- hashJoin(t1, 1, t2, 0).each { .dump.say };
|