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)
}
'scala' 카테고리의 다른 글
[scala] List 예시 - 2 (0) | 2016.09.19 |
---|---|
[scala] List 정의와 예시 (0) | 2016.09.13 |
[scala] zip, unzip 예시 (0) | 2016.09.12 |
[scala] Map의 transform, map, mapValues 예시, mapValues와 transform의 차이점 (0) | 2016.09.09 |
[scala] groupBy, distinct, sortWith, sortBy 예시 (0) | 2016.09.09 |