Я новичок в Scala. Я использую SortedMap в своем коде, и я хотел использовать mapValues для создания новой карты с некоторым преобразованием значений.
Вместо того, чтобы возвращать новый SortedMap, функция mapValues возвращает новую карту, которую затем мне нужно преобразовать в SortedMap.
Например
val my_map = SortedMap(1 -> "one", 0 -> "zero", 2 -> "two")
val new_map = my_map.mapValues(name => name.toUpperCase)
// returns scala.collection.immutable.Map[Int,java.lang.String] = Map(0 -> ZERO, 1 -> ONE, 2 -> TWO)
val sorted_new_map = SortedMap(new_map.toArray:_ *)
Это выглядит неэффективно - последнее преобразование, вероятно, снова сортирует ключи или, по крайней мере, проверяет их сортировку.
Я мог бы использовать обычную функцию карты, которая работает как на клавишах, так и на значениях, и намеренно не меняет ключи в моей функции преобразования. Это также выглядит неэффективным, поскольку реализация Map, вероятно, предполагает, что преобразование может изменить порядок ключей (например, в случае: my_map.map(tup => (-tup._1, tup._2)
) - поэтому он, вероятно, также "повторно сортирует" их.
Кто-нибудь знаком с внутренними реализациями Map и SortedMap и может сказать, правильно ли мои предположения? Может ли компилятор автоматически распознать, что ключи не были переупорядочены? Есть ли общая причина, почему mapValues не должен возвращать SortedMap? Есть ли лучший способ преобразовать значения карты, не теряя порядок ключей?
Спасибо