Объединить ключ и значения MAP - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь решить проблему и получаю результат в формате Map [String, (Double, Double)].

Мне интересно, есть ли способ преобразовать его в Map [String, Double, Double], поскольку я хочу отсортировать его по строке?

Более конкретно, я хотел бы отсортировать его какследующее:

("A1", (7.8,9.2))
("A2", (4.2,44.3))
("A11", (9,54.1))

Если бы я использовал SortedMap, я получил бы что-то вроде:

("A1", (7.8,9.2))
("A11", (9,54.1))
("A2", (4.2,44.3))

, что не является желаемым результатом.

PS: Я бы хотелпреобразовать карту в соответствующий формат, чтобы я мог применить:

sortBy((x:String)=>(x.substring(1).toInt))

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018
 val ex = Map(("A1", (7.8,9.2))
            ,("A2", (4.2,44.3))
            ,("A11", (9.0,54.1)))


Without changing the format of the Map, using

 ex.toList.sortBy(x=>x._1.substring(1).toInt)

Если вы хотите получить результат путем изменения с Map[String,(Double,Double)] на Map[String,Double,Double], используя

 ex.map{case (a,(b,c))=>(a,b,c)}.toList.sortBy(x=>x._1.substring(1).toInt)

В Scala REPL:

scala> ex.toList.sortBy(x=>x._1.substring(1).toInt)
res97: List[(String, (Double, Double))] = List((A1,(7.8,9.2)), (A2,(4.2,44.3)), (A11,(9.0,54.1)))

scala> ex.map{case (a,(b,c))=>(a,b,c)}.toList.sortBy(x=>x._1.substring(1).toInt)
res96: List[(String, Double, Double)] = List((A1,7.8,9.2), (A2,4.2,44.3), (A11,9.0,54.1))
0 голосов
/ 24 сентября 2018

Насколько я понял, вы хотите отсортировать карту по ключу.Вы можете сделать это

val inputMap = Map(
A1->(7.8,9.2),
A11-> (9,54.1),
A2-> (4.2,44.3)
)
val outputMap = inputMap.toSeq.sortBy(_._1.split("A")(1).toInt).toList
println(outputMap) //List((A1,(7.8,9.2)), (A2,(4.2,44.3)), (A11,(9,54.1)))

при условии, что ключ всегда будет иметь тот же формат, что и номер A + ex.«A5» является действительным, AA1 не является.

, если вы хотите, чтобы ваш ответ был в виде списка кортежа (ключ, значение), вы можете сделать outputMap.toSeq или toList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...