Извлечь строку "длина х ширина" в разные массивы

У меня есть строка с несколькими length а также breadth в формате length x breadth через запятую

300x250, 720x220, 560x80

Я хотел бы преобразовать это в два отдельных массива, один из которых содержит только длину, а другой - только ширину.

Ожидаемый результат

length = Array(300,720, 560)

breadth = Array(250, 220, 80)

Любой новый способ достичь этого?

3 ответа

Решение

С помощью unzip над значениями в кортеже, как следует,

val dims = "300x250, 720x220, 560x80"

dims.split("\\W+").map { 
  s => val Array(a,b,_*) = s.split("x") 
       (a.toInt,b.toInt) }.unzip

Обратите внимание на первое split выбирает слова без необходимости обрезки дополнительных пустых символов. Во-вторых split извлекаем первый и второй элементы полученного Array,

Попробуй это

scala> "300x250, 720x220, 560x80"
res0: String = 300x250, 720x220, 560x80

scala> res0.split(", ").map(_.split("x")(0).toInt)
res1: Array[Int] = Array(300, 720, 560)

scala> res0.split(", ").map(_.split("x")(1).toInt)
res2: Array[Int] = Array(250, 220, 80)
val str = "300x250, 720x220, 560x80"
val regex = "(\\d+)x(\\d+)".r
val result = for {
  pair <- str.split(",\\s+").toList
  m <- regex.findAllMatchIn(pair)
} yield (m.group(1).toInt, m.group(2).toInt)

val (length, breadth) = result.unzip
Другие вопросы по тегам