Es scheint, dass die Unterstützung für das Drucken von Arrays in Scala etwas fehlt. Wenn Sie einen drucken, erhalten Sie den Standardmüll, den Sie in Java erhalten würden:
scala> val array = Array.fill(2,2)(0)
array: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> println(array)
[[I@d2f01d
Darüber hinaus können Sie die Java toString / deepToString-Methoden aus der Klasse java.util.Arrays nicht verwenden: (oder zumindest kann ich es nicht herausfinden)
scala> println(java.util.Arrays.deepToString(array))
<console>:7: error: type mismatch;
found : Array[Array[Int]]
required: Array[java.lang.Object]
println(java.util.Arrays.deepToString(array))
Die beste Lösung zum Drucken eines 2D-Arrays besteht darin, Folgendes zu tun:
scala> println(array.map(_.mkString(" ")).mkString("\n"))
0 0
0 0
Gibt es eine idiomatischere Möglichkeit, dies zu tun?
Wie wäre es damit:
scala> val array = Array.fill(2,2)(0) array: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0)) scala> import scala.runtime.ScalaRunTime._ import scala.runtime.ScalaRunTime._ scala> val str = stringOf(array) str: String = Array(Array(0, 0), Array(0, 0))
quelle
Hinzufügen von etwas mehr zu Arjans Antwort - Sie können die mkString-Methode verwenden, um das Trennzeichen zwischen Elementen zu drucken und sogar anzugeben. Zum Beispiel :
val a = Array(1, 7, 2, 9) a.mkString(" and ") // "1 and 7 and 2 and 9" a.mkString("<", ",", ">") //mkString(start: String, sep: String, end: String) // "<1,7,2,9>"
quelle
Versuchen Sie einfach Folgendes:
// create an array val array1 = Array(1,2,3) // print an array elements seperated by comma println(array1.mkString(",")) // print an array elements seperated by a line println(array1.mkString("\n")) // create a function def printArray[k](a:Array[k])= println(a.mkString(",")) printArray(array1)
quelle
Ich mag dieses eher:
Array(1, 7, 2, 9).foreach(println)
quelle
Sie können eine saubere Formatierung von Array [Array [Somethings]] mit benutzerdefinierten Trennzeichen für das innere und das äußere Array erhalten:
def arrayToString(a: Array[Array[Int]]) : String = { val str = for (l <- a) yield l.mkString("{", ",", "}") str.mkString("{",",\n","}") } val foo = Array.fill(2,2)(0) println(arrayToString(foo))
Das führt zu:
{{0,0}, {0,0}}
quelle
Die "funktionale Programmierung", um dies zu tun (soweit es mich betrifft), ist:
scala> array foreach{case a => a foreach {b => print(b.toString + " ")}; print('\n')} 0 0 0 0
Oder wenn Ihnen der Abstand nicht wirklich wichtig ist:
scala> array foreach{a => a foreach println} 0 0 0 0
IMHO, funktionale Programmierung kann ein wenig chaotisch werden, wenn es zu lange dauert, um dies zu machen, würde ich sagen, gehen Sie einfach mit dem zwingenden Weg.
quelle
foreach
mehr als funktional ist.Array(1, 7, 2, 9) foreach println
Kleinere Änderung der Antwort von rupert160. Keine Punkte oder Klammern erforderlich.
quelle