[scala] Array 예시

scala 2016. 9. 12. 18:53


scala의 Array 예제이다. 


val array1 = Array(1,2,3)
val array2 = Array(3,4,5)


+: 연산자를 사용하면 재미있는 결과를 볼 수 있다. 앞과 뒤에 쉽게 붙일 수 있다. c++ 연산자 오버로딩과 비슷하게 사용할 수 있다. 

println(-1 +: Array(1,2,3) :+ 4 mkString " ")

결과는 다음과 같다. 


-1 1 2 3 4



Array 객체의 내용을 출력하려면, mkString 메소드를 사용해야 엘리먼트를 볼 수 있다. 그냥 출력하면 내부에서 관리하는 객체 이름으로 보인다. 

++ 연산자는 Array 객체를 서로 합친다. 


//println(array1 + array2) //compile error
println(array1 ++ array2) //내부 객체 이름 출력
println(array1 ++ array2 mkString " ")


결과는 다음과 같다.


[I@3567135c

1 2 3 3 4 5



intersect와 union 예제이다. union 메소드 결과와 Array.concat 메소드 결과는 동일하다.


println(array1 intersect array2 mkString " ")
println(array1 union array2 mkString " ")
println(Array.concat(array1, array2) mkString " ")

결과는 다음과 같다.


3

1 2 3 3 4 5

1 2 3 3 4 5



두 배열의 엘리먼트를 합치면서 유일한 값만 뽑으려면 distinct 메소드를 사용한다.

A-B 집합연산에 해당하는 diff메소드를 사용할 수도 있다.

println((array1 union array2 distinct) mkString " ")
println(array1 diff array2 mkString " ")


결과는 다음과 같다.


1 2 3 4 5
1 2



배열의 엘리먼트의 순서를 거꾸로 하려면 reverse 메소드를 사용한다.


println((array1.reverse).mkString(" "))

결과는 다음과 같다.


3 2 1




range를 array로 변환할 수도 있다.

println((0 to 3).toArray.mkString(" "))

결과는 다음과 같다.

0 1 2 3





Array.fill 메소드는 c의 memset과 같은 느낌으로 초기화할 수 있는 메소드이다. 

Byte 타입으로 3개의 엘리먼트를 가진 Array를 0으로,

Byte 타입으로 5개의 엘리먼트를 가진 Array를 1로 초기화하려면 다음과 같이 호출할 수 있다.

println(Array.fill[Byte](3)(0) mkString " ")
println(Array.fill[Byte](5)(1) mkString " ")

결과는 다음과 같다.

0 0 0

1 1 1 1 1




만약 5개의 엘리먼트를 Int 타입으로 랜덤하게 생성하려면 다음을 호출한다.



println(Array.fill[Int](5){scala.util.Random.nextInt(5)} mkString " ")

랜덤 결과 값은 다음과 같다.


4 0 2 0 2






Array.fill 메소드로 2*2 배열을 초기화할 수 있다. 결과값을 보려면, mkString에 .deep를 추가한다. 

deep.mkString을 사용하니 내용을 출력할 수 있었다.

val array = Array.fill[Int](2,2){scala.util.Random.nextInt(5)}
println(array mkString " ")
println(array.deep.mkString(" "))


결과는 다음과 같다.


[I@73f792cf [I@2ed94a8b

Array(2, 2) Array(2, 3)





Array에 foreach를 사용할 수 있다. 

val array = Array.fill[Int](5){scala.util.Random.nextInt(5)}
var sum = 0
array.foreach(sum += _)
println(sum)

array foreach(i => println(i))

array foreach{
case i => println(i)
}


Posted by '김용환'
,