Преобразовать строку scala в пары ключ-значение - PullRequest
0 голосов
/ 22 октября 2018

Как преобразовать строковые значения в пары ключ-значение из строкового формата:

key1-value1,value2

в

(key1,value1),(key1,value2)?

Ответы [ 4 ]

0 голосов
/ 22 октября 2018

Как насчет этого:

scala> val a = "key1-value1,key2-value2,key3-value3"
a: String = key1-value1,key2-value2,key3-value3

scala> a.split(",").map( x=> { val y = x.split("-");(y(0),y(1)) } ).map( x=> (x._1,x._2) ).toMap
res11: scala.collection.immutable.Map[String,String] = Map(key1 -> value1, key2 -> value2, key3 -> value3)

scala>
0 голосов
/ 22 октября 2018

Ответ @Prayagupd великолепен и работает просто отлично.В этом ответе используется функция scala split , которая, в отличие от Java, допускает ввод массива символов:

val data = """key1-value1,value2"""
val t = data.split(Array(',','-'))  //gives: Array(key1, value1, value2)
t.drop(1).map(i => (t.head, i))  //Create tuples using key1 and value[i]

, что дает:

res0: Array[(String, String)] = Array((key1,value1), (key1,value2))
0 голосов
/ 22 октября 2018
data.split(Array('-', ',')) match { 
  case Array(k, v1, v2) => List(k -> v1, k -> v2)
}

или

val r = """(.+)-(.+),(.+)""".r

data match {
  r(k, v1, v2) => List(k -> v1, k -> v2)
}
0 голосов
/ 22 октября 2018

вы можете использовать .split("pattern").

val data = """key1-value1,value2"""

val kv = data.split("-") match {
  case Array(h, t) =>
    t.split(",").map(value => (h, value)).toList
}

println(kv)

вывод:

List((key1,value1), (key1,value2))
...