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

Posted

技术标签:

【中文标题】在scala中使用二维数组创建特定模式【英文标题】:Creating a specific pattern with two-dimensional array in scala 【发布时间】:2019-04-25 06:36:17 【问题描述】:

所以我的问题是我想将二维 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 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 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

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

【问题讨论】:

你尝试了什么?似乎您的标签中不仅有 scala,而且没有显示您尝试过的代码。 如果您使用一种语言编程,请不要发送不相关的语言标签。也请阅读the help pages,采取the SO tour,阅读有关how to ask good questions,以及this question checklist。最后学习如何创建minimal reproducible example。 好吧,我没有代码,因为我什至不知道如何解决这个问题。这就是我在这里问的原因 嗨@MatiasBerglund,欢迎来到***,这里不是问“这是我的问题,请给我一些代码”的地方也不是问“我怎么能做到这一点,而不给我代码”。您可能会在其他网站(例如 scala gitter channel)上获得帮助,但如果您证明您已经尝试过某些东西,即使在那里人们也会更愿意提供帮助 - 解决问题是您的任务!,我们可以帮助您解决特定于代码的问题。 【参考方案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)
  

【讨论】:

【参考方案2】:
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)
   
  

【讨论】:

以上是关于在scala中使用二维数组创建特定模式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Scala 中将 RDD 转换为二维数组?

使用 Class 对象创建通用二维数组

剑指offer-特定二维数组中查找一个元素是否存在-二分搜索-二维数组

在二维数组中随机生成簇

JAVA中如何创建一个二维数组,然后给二维数组赋值!

用另一个模式替换二维数组中的模式