在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中使用二维数组创建特定模式的主要内容,如果未能解决你的问题,请参考以下文章