Gegeben ist eine Skalareichweite, die eine Auflistung von Schlüssel/Wert-Paaren aufweist (in der Reihenfolge Schlüsseltyp-Paar nicht festgelegt, Anzahl der Schlüssel/Wert-Paare nicht festgelegt):Schnelle Möglichkeit zum Extrahieren von Token aus einer Skalareiche
val s = "key1: val1, key2: (val2.1, val2.2, val2.3), key3:(), key4: val4"
ich brauche diese in einer unveränderlichen Karte ziehen wie:
Map("key1" -> "val1",
"key2" -> "(val2.1, val2.2, val2.3)",
"key3" -> "()",
"key4" -> "val4")
habe ich versucht, dies:
val kvMap = s.split(", ").map(_.split(": ")).map(t => t(0) -> t(1)).toMap
Dies ist jedoch fehlgeschlagen, da in Klammern und zwischen den Schlüssel/Wert-Paaren dasselbe Trennzeichen (Komma) verwendet wird.
Ich könnte es mit einem Stapel mit Iteration tun, aber das vermeiden wollen.
Ich habe auch versucht, einen regulären Ausdruck zu schreiben, die mir dabei helfen könnte, aber es könnte nur für 1 Paar Arbeits erhalten:
scala> val MyPattern = "([^=]*):(.*)".r
Pattern: scala.util.matching.Regex = ([^=]*):(.*)
^
scala> val MyPattern(k, v) = "key: value"
k: String = key
v: String = " value"
Ich suche eine funktionale Möglichkeit, diese Operation zu tun.
Perfekt! Das ist fantastisch! –