RosettaCodeData/Task/Hash-join/Wren/hash-join.wren

54 lines
1.0 KiB
Plaintext

import "./fmt" for Fmt
class A {
construct new(age, name) {
_age = age
_name = name
}
age { _age }
name { _name }
}
class B {
construct new(character, nemesis) {
_character = character
_nemesis = nemesis
}
character { _character }
nemesis { _nemesis }
}
var tableA = [
A.new(27, "Jonah"), A.new(18, "Alan"), A.new(28, "Glory"),
A.new(18, "Popeye"), A.new(28, "Alan")
]
var tableB = [
B.new("Jonah", "Whales"), B.new("Jonah", "Spiders"), B.new("Alan", "Ghosts"),
B.new("Alan", "Zombies"), B.new("Glory", "Buffy")
]
var h = {}
var i = 0
for (a in tableA) {
var n = h[a.name]
if (n) {
n.add(i)
} else {
h[a.name] = [i]
}
i = i + 1
}
System.print("Age Name Character Nemesis")
System.print("--- ----- --------- -------")
for (b in tableB) {
var c = h[b.character]
if (c) {
for (i in c) {
var t = tableA[i]
Fmt.print("$3d $-5s $-9s $s", t.age, t.name, b.character, b.nemesis)
}
}
}