복붙노트

[SCALA] 스칼라 - 인쇄 배열

SCALA

스칼라 - 인쇄 배열

그것은 인쇄 배열에 대한 지원이 다소 스칼라에서 부족한 것 같습니다. 당신이 하나를 인쇄하는 경우, 당신은 당신이 자바로 불렀 기본 쓰레기를 얻을 :

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 클래스의 자바 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))

나는 2 차원 배열을 인쇄 찾을 수있는 가장 좋은 방법은 다음을 수행하는 것입니다 :

scala> println(array.map(_.mkString(" ")).mkString("\n"))
0 0
0 0

이 일을 더 관용적 방법이 있나요?

해결법

  1. ==============================

    1.스칼라 2.8에서는 배열에 정의 된 깊은 방법을 사용할 수 반환을 모두 cointaining IndexedSeq (아마도 중첩)이 배열의 요소 및 그에 된 mkString 전화 :

    스칼라 2.8에서는 배열에 정의 된 깊은 방법을 사용할 수 반환을 모두 cointaining 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 '배열'을 가지고있다.

  2. ==============================

    2.이것은 어떤가요:

    이것은 어떤가요:

    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))
    
  3. ==============================

    3.Arjan의 대답에 조금 더 추가 - 인쇄, 심지어 요소들 사이의 구분 기호를 지정 된 mkString의 방법을 사용할 수 있습니다. 예를 들어 :

    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>" 
    
  4. ==============================

    4.단순히이 시도 :

    단순히이 시도 :

      // 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)
    
  5. ==============================

    5.오히려 이와 같은 I :

    오히려 이와 같은 I :

    Array(1, 7, 2, 9).foreach(println)
    
  6. ==============================

    6.은 "함수형 프로그래밍"방법은 (지금까지의 내가 우려 등)이 작업을 수행하는 것입니다 :

    은 "함수형 프로그래밍"방법은 (지금까지의 내가 우려 등)이 작업을 수행하는 것입니다 :

    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는 함수형 프로그래밍이 좀 지저분를 얻을 수 있습니다, 난 그냥 필수적 방법을 갈 말하고 싶지만.

  7. ==============================

    7.외부 배열은 다음뿐만 아니라 같이 내부에 대한 사용자 정의 구분와 배열 [배열 [일도]]의 깔끔한 서식을 얻을 수 있습니다 :

    외부 배열은 다음뿐만 아니라 같이 내부에 대한 사용자 정의 구분와 배열 [배열 [일도]]의 깔끔한 서식을 얻을 수 있습니다 :

        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}}
    
  8. from https://stackoverflow.com/questions/3328085/scala-printing-arrays by cc-by-sa and MIT license