Реализовать функцию Excel Loopup в scala - PullRequest
0 голосов
/ 30 марта 2020

У меня есть два массива

arrayLong = Array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i')

arrayShort = Array('c', 'h')

Мне нужно сформировать третий массив такой же длины arrayLong с 1, если это значение позиции присутствует в arrayShort иначе 0.

Для приведенного выше примера мне нужно вывести Array(0, 0, 1, 0, 0, 0, 0, 1, 0), так как только c, h присутствует в arrayShort, поэтому их позиции обновляются до 1.

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Один из вариантов - использовать карту с if if

val arrayShort=Array ('c','h')
val arrayLong=Array('a','b','c','d','e','f','g','h','i')
val result = arrayLong.map(f => if(arrayShort.contains(f)) 1 else 0)

Результат

result: Array[Int] = Array(0, 0, 1, 0, 0, 0, 0, 1, 0)
1 голос
/ 30 марта 2020
def lookup[T](in: Array[T], values: Array[T]): Array[Int] = {
  val valuesSet = new mutable.HashSet[T] ++ values
  in.map(i => if (valuesSet.contains(i)) 1 else 0)
}

lookup(Array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'), Array('c', 'h'))

Примечание: преобразование в набор делает эту функцию исполняемой O(n + m)

...