我的问题很简单,但我还没有找到有效的实现.
假设有一个像这样的矩阵A:
0 0 0 0 0 0 0
4 4 2 2 2 0 0
4 4 2 2 2 0 0
0 0 2 2 2 1 1
0 0 0 0 0 1 1
Run Code Online (Sandbox Code Playgroud)
现在我想找到这个矩阵中具有给定大小的矩形区域的所有起始位置.区域是A的子集,其中所有数字都相同.
我们说宽度= 2和高度= 3.有3个区域有这样的大小:
2 2 2 2 0 0
2 2 2 2 0 0
2 2 2 2 0 0
Run Code Online (Sandbox Code Playgroud)
函数调用的结果将是这些区域的起始位置(x,y从0开始)的列表.
List((2,1),(3,1),(5,0))
Run Code Online (Sandbox Code Playgroud)
以下是我目前的实施情况."区域"在这里被称为"表面".
case class Dimension2D(width: Int, height: Int)
case class Position2D(x: Int, y: Int)
def findFlatSurfaces(matrix: Array[Array[Int]], surfaceSize: Dimension2D): List[Position2D] …Run Code Online (Sandbox Code Playgroud) 假设我可以放心,我有一个包含偶数元素的列表,例如
val items = List(1,2,3,4,5,6)
Run Code Online (Sandbox Code Playgroud)
我知道我可以写一个列表理解,一次只取一个元素:
for (item <- items) println(item)
Run Code Online (Sandbox Code Playgroud)
但是,有什么方法可以使用理解来一次处理2个或更多元素吗?
for ((first, second) <- items) println (first + second)
Run Code Online (Sandbox Code Playgroud)