【问题标题】:How to check the existence of a value in an ArrayBuffer?如何检查 ArrayBuffer 中的值是否存在?
【发布时间】:2014-10-31 13:52:34
【问题描述】:

我是 Scala 的新手,我正在编写一个程序,其中我有一个二进制图像点的 ArrayBuffer,我想在一个循环中检查该 ArrayBuffer 中是否存在特定点,不要添加。这是我正在处理的代码部分:

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)) {//this is where I want to check if the current point (value1,value2) is already exists in vectVisitedPoint
                                    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
            }
    }
}

我想我需要用另一种方式来写它,但不知道怎么写?!

谢谢。

【问题讨论】:

  • 您是从 Java 接口翻译代码吗? img.get 是您自己的方法还是来自 API?另外,您确定程序中的逻辑正确吗?如果您跳出循环,则使用 img.get 为上一行中的某个点计算开始。这是你想要的吗?
  • @Ashalynd 我没有翻译它,是的,如果我想在我的图像中找到一条线,该算法可以工作,但我想找到所有线比较它们并获得最长的 this is my original code 这是一个骨架图像有很多行。所以这里的一个用于查找线的起点,我想将该线的所有点放在一个数组缓冲区中以将其指向为已访问,下次我想找到另一个线的起点时,我检查它是否是否访问过。这就是程序的作用

标签: scala arraybuffer


【解决方案1】:

你可以使用:

vectVisitedPoint.exists(_ == (value1, value2))

您希望我将您的代码重构为更少的代码、更多的功能、更易读且可能更有效的方式吗?如果是这样,请创建另一个问题,我会的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多