【问题标题】:Extract string of "length x breadth" into different arrays将“长度 x 宽度”的字符串提取到不同的数组中
【发布时间】:2015-01-07 15:51:24
【问题描述】:

我有一个包含多个lengthbreadth 的字符串,格式为length x breadth,用逗号分隔

300x250, 720x220, 560x80

我想把它转换成两个单独的数组,一个只包含长度,另一个只包含宽度。

预期输出

length = Array(300,720, 560)

breadth = Array(250, 220, 80)

有什么新颖的方法可以实现吗?

【问题讨论】:

    标签: arrays scala collections scala-collections


    【解决方案1】:

    在元组值上使用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 的第一个和第二个元素。

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

        【解决方案3】:

        试试这个

        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)
        

        【讨论】:

          猜你喜欢
          • 2023-01-26
          • 2019-12-17
          • 1970-01-01
          • 1970-01-01
          • 2020-03-14
          • 2018-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多