Если я понимаю ваши требования, то то, что вы хотите, можно сделать с помощью следующего фрагмента кода:
val file1 = Array(("test", 2), ("other", 5))
val file2 = Array(("test", 3), ("boom", 4))
val map1 = file1.toMap
val map2 = file2.toMap
val allKeys = map1.keySet ++ map2.keySet
val result: Array[(String, (Int, Int))] = allKeys.map(k => (k, (map1.getOrElse(k, 0), map2.getOrElse(k, 0))))(scala.collection.breakOut)
println(result.mkString)
Идея проста: преобразовать оба массива в карты и создать результирующий массив с помощью итерации посоединенный набор ключей.Обратите внимание, что этот код не сохранил ни одного порядка, но я не уверен, что это важно, и это делает код намного проще.Также обратите внимание, что этот код требует, чтобы коллекции помещались в память, фактически несколько раз.Если file1
и file2
на самом деле являются содержимым больших файлов, которые не помещаются в память, следует использовать гораздо более сложный алгоритм.