Извлечь строку "длина х ширина" в разные массивы
У меня есть строка с несколькими 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