2014-02-09 2 views
1

У меня есть списокtoMap когда ключи повторяются с различными значениями

val data = List(2, 4, 3, 2, 1, 1, 1,7) 

, с которым я хочу, чтобы создать карту таким образом, что значения в приведенном выше списке являются ключом к новому с индексами в качестве новых значений я попытался

scala> data.zipWithIndex.toMap 
res5: scala.collection.immutable.Map[Int,Int] = Map(1 -> 6, 2 -> 3, 7 -> 7, 3 -> 2, 4 -> 1) 

, но странно это дает res5 (1) 6, но я хочу, чтобы это было 4.

Я мог бы решить его

data.zipWithIndex groupBy (_._1) mapValues (w=>w.map(tuple=>tuple._2) min) 

, но есть ли способ передать функцию f в toMap так, чтобы она создавала карту желаемым образом.

+0

Возможно, 'MultiMap' подойдет вашим потребностям? –

ответ

1

toMap собирается добавить каждую пару на карту в порядке архивного списка, а при добавлении отображения k -> v на карту, которая уже содержит k, старое значение просто заменяется.

легко исправить просто обратить список после архивирования индексов и перед преобразованием в карту:

data.zipWithIndex.reverse.toMap 

Теперь отображения 1 -> 6 и 1 -> 5 будут добавлены до того 1 -> 4, что означает 1 -> 4 это один вы В результате мы увидим.

Смежные вопросы