在Scala中打印类似表格的二维数组

5

我有一个二维数组的问题。我希望这个数组像一个表格一样,而不是显示成 Array(), Array()。

比如下面这样:

 ........
 ........
 ........
 ........     
 ........
 ........
 ........
 ........
 ........

 scala> val table = Array.fill(9,8)('.')
 table: Array[Array[Char]] = Array(Array(., ., ., ., ., ., ., .), Array(., ., ., ., ., ., ., .),     
 Array(., ., ., ., ., ., ., .), Array(., ., ., ., ., ., ., .), Array(., ., ., ., ., ., ., .),   
 Array(., ., ., ., ., ., ., .), Array(., ., ., ., ., ., ., .), Array(., ., ., ., ., ., ., .),   
 Array(., ., ., ., ., ., ., .))

你说的“像个表”是什么意思?无论如何,“一个表”就是Array [Array [Something]]。 - ale64bit
2个回答

13
你可以使用 printprintlnforeach 来实现所需的效果:
table foreach { row => row foreach print; println }

您还可以在集合上使用mkString方法,该方法将列表的元素连接在一起(可以不使用分隔符,或者使用提供字符串分隔符的重载):

print(table.map(_.mkString).mkString("\n"))

3
或者 table.foreach(x => println(x.mkString)):该代码片段使用Scala编写,目的是遍历名为table的集合,并将每个元素的字符串表示形式打印到控制台。其中"=>"是Scala中的lambda表达式,相当于Java中的匿名函数。 - ale64bit
谢谢!你是否知道我如何定位数组中的特定行,以便更改该行中的值?@kaktusito - acolisto
请针对不相关的问题开一个新的提问。在提问之前,请先进行一些谷歌搜索,并让我们知道您尝试了什么以及您所面临的挑战是什么。我鼓励您完成 Stackoverflow 的导览(在右上角的“帮助”中选择“导览”)! - Ben Reich
对于那些难以理解无参语法的人,它是 table.foreach { row => row.foreach(print); println() }print 打印行,println 打印一个新行。此外,不要硬编码换行符 \n,而是使用平台相关的 System.lineSeparator()。不用谢! - Abhijit Sarkar

0
scala> val arr: Array[Array[Int]] = Array.ofDim(2,2)
val arr: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))

scala> arr.map(_.mkString(" ")).foreach(println)
0 0
0 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接