如何将以下代码更改为更实用,更可读和更高效的代码?

时间:2014-09-07 16:15:23

标签: scala

我正在处理代码以找到最长的分支,这是一个在我的二进制图像中找到下一个未访问点的函数: 注意:我在vectVisitedPoint中保存找到像素的数组缓冲区。

var vectVisitedPoint= new scala.collection.mutable.ArrayBuffer[Point]()
    var pTemp=new Point (0,0)
    var res = new Array[Byte](1)
    img.get(pTemp.x.toInt,pTemp.y.toInt,res) //img is a binary image
    var value1: Int=0
    var value2: Int=0
    scala.util.control.Breaks.breakable {
            while((value1 < img.rows ) ){
                    while ( (value2 < img.cols )){
                             if (res(0) == -1 && vectVisitedPoint.exists(_ == (value1, value2))) {
                                    pTemp.x=(pTemp.x.toInt)+value1
                                    pTemp.y=(pTemp.y.toInt)+value2
                                    vectVisitedPoint.append(new Point(pTemp.x,pTemp.y)
                                    scala.util.control.Breaks.break()
                              }
                    value2=value2+1
                    img.get(value1,value2,res)
                    }
            value2=0
            value1=value1+1
            }
    }
}

1 个答案:

答案 0 :(得分:2)

4e6在他的评论中可能是正确的(对不起,我的错),这里可能有太多的代码是SO问题,通常是“Scala相当于......的形式”的问题被接受但是也许有些人觉得这个问题不是那种形式。不过我会在这里回答它,如果他们喜欢

,mod可以移动它
def longestBranch(binImage: TypeOfBinImage): Vector[Point] = {
  var res = new Array[Byte](1)

  def getRes(x: Int, y: Int) = {
    binImage.get(x, y, res)
    res
  }

  (0 until img.rows).foldLeft(Vector.empty[Point])((visited, x) => 
    (0 until img.cols).find(y => 
      getRes(x, y)(0) == -1 && visited.exists(_ == (x, y)))
    .map(y => visited :+ new Point(visited.last + x, visited.last + y))
    .getOrElse(visited)
  )
}

注意:我认为这不是更高/更低效,但肯定更多是Scalaery