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
0 Asked on October 13, 2020 by alisher
1 Asked on October 12, 2020
javascript %d1%81%d0%be%d0%b1%d1%8b%d1%82%d0%b8%d1%8f %d1%86%d0%b8%d0%ba%d0%bb%d1%8b
1 Asked on October 9, 2020 by braflovsky
python %d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc %d1%81%d0%bf%d0%b8%d1%81%d0%be%d0%ba
1 Asked on October 8, 2020
1 Asked on October 6, 2020 by eriksongerson
1 Asked on October 5, 2020
2 Asked on October 4, 2020 by webdev96
2 Asked on October 3, 2020 by 1div0
1 Asked on October 1, 2020 by argo-troll
1 Asked on September 29, 2020 by ginger-bread
ip %d0%ba%d0%be%d0%bc%d0%bc%d1%83%d1%82%d0%b0%d1%82%d0%be%d1%80
2 Asked on September 28, 2020
matplotlib numpy opencv python %d0%b8%d0%b7%d0%be%d0%b1%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f
1 Asked on September 28, 2020 by yuri-petrov
1 Asked on September 27, 2020 by padawan
Get help from others!
Recent Answers
Recent Questions
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP