RosettaCodeData/Task/Hash-join/Scala/hash-join.scala

20 lines
655 B
Scala

def join[Type](left: Seq[Seq[Type]], right: Seq[Seq[Type]]) = {
val hash = right.groupBy(_.head) withDefaultValue Seq()
left.flatMap(cols => hash(cols.last).map(cols ++ _.tail))
}
// Example:
val table1 = List(List("27", "Jonah"),
List("18", "Alan"),
List("28", "Glory"),
List("18", "Popeye"),
List("28", "Alan"))
val table2 = List(List("Jonah", "Whales"),
List("Jonah", "Spiders"),
List("Alan", "Ghosts"),
List("Alan", "Zombies"),
List("Glory", "Buffy"))
println(join(table1, table2) mkString "\n")