Stack Overflow на русском Asked by Bleser on January 4, 2022
Есть необходимость преобразовать:
Map(
"a.b.c" -> "abc",
"a.b.d" -> "abd"
)
в:
Map(
"a" -> Map(
"b" -> Map(
"c"-> "abc",
"d" -> "abd"
)
)
)
Пока что я смог добиться только следующей структуры:
List(Map("a" -> Map("b" -> Map("c" -> "abc"))), Map("a" -> Map("b" -> Map("d" -> "abd"))))
Но как это сплющить идей пока что нет.
UPD:
Немного измененый вариант из ответа который решает мою проблему.
def go(pairs: Map[Array[String], _]): Map[String, _] = {
if (pairs.exists(_._1.length == 1)) pairs.map(t => t._1.head -> t._2)
else {
pairs
.groupBy(_._1.head.toString)
.mapValues { grouped =>
val woGroupedKey = grouped.map { case (key, value) => key.tail -> value }
go(woGroupedKey)
}
}
}
С рекурсией как-то так:
val original = Map("a.b.c" -> "abc", "a.b.d" -> "abd")
def go(pairs: Map[String, _]): Map[String, _] = {
// если в ключе осталась одна буква - выходим
if (pairs.exists(_._1.length == 1)) pairs
else {
pairs
// группируем по первой букве
.groupBy(_._1.head.toString)
.mapValues { grouped =>
// раз сгрупировали - уберём первую букву из ключа
val woGroupedKey = grouped.map { case (key, value) => key.tail -> value }
// пробуем ещё раз
go(woGroupedKey)
}
}
}
// убираем точки, оставляем буквы
val woDots: Map[String, String] = original
.map { case (key, value) => key.filter(_.isLetter) -> value }
go(woDots) // Map(a -> Map(b -> Map(c -> abc, d -> abd)))
Answered by EnverOsmanov on January 4, 2022
1 Asked on December 29, 2020
1 Asked on December 29, 2020
0 Asked on December 29, 2020
arduino case %d0%b1%d0%b8%d1%82%d0%be%d0%b2%d1%8b%d0%b5 %d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d0%b8 %d0%bc%d0%b0%d1%81%d1%81%d0%b8%d0%b2%d1%8b %d1%86%d0%b8%d0%ba%d0%bb%d1%8b
1 Asked on December 29, 2020 by siyovush-abdulloev
0 Asked on December 29, 2020
javascript slick js %d1%81%d0%bb%d0%b0%d0%b9%d0%b4%d0%b5%d1%80
2 Asked on December 28, 2020 by olbutov2003
c %d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc %d0%be%d0%bf%d1%82%d0%b8%d0%bc%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f
2 Asked on December 28, 2020
1 Asked on December 27, 2020 by sinneren
1 Asked on December 27, 2020 by dgdays
linux %d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%be%d0%bd%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5 %d0%ba%d0%bb%d0%b0%d0%b2%d0%b8%d1%88%d0%b8
1 Asked on December 27, 2020 by festina
php %d0%bf%d0%be%d0%b4%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b0 %d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b8
Get help from others!
Recent Answers
Recent Questions
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir