Scala-배열 인쇄
Scala에서는 배열 인쇄에 대한 지원이 다소 부족한 것 같습니다. 하나를 인쇄하면 Java에서 얻을 수있는 기본 가비지가 표시됩니다.
scala> val array = Array.fill(2,2)(0)
array: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> println(array)
[[I@d2f01d
또한 java.util.Arrays 클래스에서 Java toString / deepToString 메소드를 사용할 수 없습니다. (또는 적어도 알아낼 수 없습니다)
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))
2D 배열을 인쇄하기 위해 찾을 수있는 가장 좋은 해결책은 다음을 수행하는 것입니다.
scala> println(array.map(_.mkString(" ")).mkString("\n"))
0 0
0 0
더 관용적 인 방법이 있습니까?
Scala 2.8에서는 deep
Array에 정의 된 메서드를 사용 하여이 배열의 모든 (중첩 된) 요소를 포함하는 IndexedSeq를 반환하고 이에 대해 mkString을 호출 할 수 있습니다.
scala> val array = Array.fill(2,2)(0)
array: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> println(array.deep.mkString("\n"))
Array(0, 0)
Array(0, 0)
반환 된 IndexedSeq에는 기본적으로 stringprefix 'Array'가 있으므로 이것이 원하는 것을 정확하게 제공하는지 확실하지 않습니다.
이건 어때:
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))
Arjan의 대답에 조금 더 추가-mkString 메서드를 사용하여 요소 사이의 구분 기호를 인쇄하고 지정할 수도 있습니다. 예 :
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>"
간단히 다음을 시도하십시오.
// 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)
나는 차라리 이것을 좋아한다.
Array(1, 7, 2, 9).foreach(println)
이 작업을 수행하는 "기능적 프로그래밍"방법은 다음과 같습니다.
scala> array foreach{case a => a foreach {b => print(b.toString + " ")}; print('\n')}
0 0
0 0
또는 간격이별로 중요하지 않은 경우 :
scala> array foreach{a => a foreach println}
0
0
0
0
IMHO, 함수형 프로그래밍은 약간 지저분해질 수 있습니다. 이것을 만드는 데 시간이 너무 오래 걸리면 명령형 방식으로 가야합니다.
내부 및 외부 배열에 대한 사용자 지정 구분 기호를 사용하여 Array [Array [Somethings]]의 깔끔한 형식을 얻을 수 있습니다.
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))
결과는 다음과 같습니다.
{{0,0},
{0,0}}
참고 URL : https://stackoverflow.com/questions/3328085/scala-printing-arrays
'Programing' 카테고리의 다른 글
PowerShell을 사용하여 FTP로 파일 업로드 (0) | 2020.11.07 |
---|---|
노드가 'N'인 경우 가능한 이진 및 이진 검색 트리는 몇 개입니까? (0) | 2020.11.07 |
Java에서 for 루프를 1이 아닌 증분으로 늘리는 방법 (0) | 2020.11.07 |
github에서 여러 저장소를 쉽게 언 워치하는 방법은 무엇입니까? (0) | 2020.11.07 |
AngularJS를 사용하여 새 창에서 링크 열기 (0) | 2020.11.07 |