在Scala中使用二维数组创建特定模式

时间:2018-11-22 14:39:55

标签: arrays scala multidimensional-array

所以我的问题是我想将二维int数组的值更改为1,以便数组看起来像这样

0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
0 1 1 1 0
0 0 1 0 0

我的函数中有一个等于数组大小的参数“ size”。因此,无论阵列大小如何,我都想创建此模式

大小等于9的示例:

0 0 0 0 1 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 0 0

哦,大小显然是一个奇数整数,因此可以创建这种倾斜的正方形“形状”。请帮忙!

2 个答案:

答案 0 :(得分:1)

应该是这样的:

  def createDiamond(size: Int) = {
    require(size % 2 != 0, "size must be odd")
    def innerIterator(limit: Int) = {
      (0 until size).map{ column =>
        if(column > ((size / 2) + limit) || column < ((size / 2) - limit)) "0"
        else "1"
      }.mkString(" ") + "\n"
    }

    val str = (0 until size).map{ row => if(row <= size / 2) innerIterator(row) else innerIterator(size - row - 1)}.mkString("")
    println(str)
  }

答案 1 :(得分:0)

def createFilter(size: Int, value: Int) :Array[Array[Int]] = {
   val middle = size / 2
   if (size % 2 == 1) {
     Array.fill(size, size)(value) 
   } else {
     Array.tabulate(size + 1, size + 1)((x, y) => 
     if (abs(middle - x) + abs(middle - y) 
     <= middle) value else 0)
   }
 }