Если у меня есть коллекция c
типа T
и есть свойство p
на T
(типа P
, скажу), что это лучший способ сделать карту-на-извлекая ключ?Скала лучший способ превратить коллекцию в карту по-ключу?
val c: Collection[T]
val m: Map[P, T]
Один из способов заключаются в следующем:
m = new HashMap[P, T]
c foreach { t => m add (t.getP, t) }
Но теперь мне нужно изменяемой карты. Есть ли лучший способ сделать это, чтобы он был в 1 строке, и я в конечном итоге с неизменной Карта? (Очевидно, я мог бы превратить приведенное выше в простую библиотечную утилиту, как и в Java, но я подозреваю, что в Scala нет необходимости)
Я по-прежнему предпочитаю, чтобы мои предложения в trac «Traversable [K] .mapTo (K => V)» и «Traversable [V] .mapBy (V => K)» были лучше! –
Как альтернатива, с zip: 'c map (_.getP) zip c toMap' – onof
Помните, что это квадратичная операция, но то же самое касается большинства других вариантов, приведенных здесь. Если посмотреть на исходный код scala.collection.mutable.MapBuilder и т. Д., Мне кажется, что для каждого кортежа создается новая неизменяемая карта, к которой добавляется кортеж. –