scala에서 배열은 고정길이로 사용할건지, 가변으로 사용할건지로 구분을 둔다.
1. 고정길이 : Array
scala> val nums = new Array[Int](10) nums: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)int형 10칸짜리 array 초기화했다.
값을 설정하고 싶을때는,
scala> val s = Array("hello","world"); s: Array[String] = Array(hello, world)
2. 가변길이 : ArrayBuffer
자바에서 ArrayList
C++에서는 vector
scala> val b = ArrayBuffer[Int]() b: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
원소를 추가하거나 삭제할때는 대강 이렇다.
scala> b+=1 res3: b.type = ArrayBuffer(1) scala> b+=(2,3,4,5) res4: b.type = ArrayBuffer(1, 2, 3, 4, 5) scala> b+=(1,2,3) res5: b.type = ArrayBuffer(1, 2, 3, 4, 5, 1, 2, 3) scala> b.trimEnd(3) scala> b res7: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5) scala> b.insert(2,99) scala> b res9: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 99, 3, 4, 5) scala> b.remove(2) res10: Int = 99 scala> b.remove(2,3) scala> b res12: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2)
3. array 탐색
보통 다른데서는 for문이나 while을 많이 쓴다.
scala> a res28: Array[Int] = Array(2, 3, 5, 7, 11) scala> for(elem <- a if elem % 2 != 0) yield 2 * elem res29: Array[Int] = Array(6, 10, 14, 22)
그런데 scala에서는 이렇게 할 수도 있다.
scala> a.filter(_ % 2 != 0).map(2 * _) res30: Array[Int] = Array(6, 10, 14, 22)
fileter라는 함수가 내부적으로 for문과 동일하게 n번의 복잡도를 갖는지 확인을 해봐야겠지만, 뭔가 함수형 언어라는 느낌이 조금은 나는것 같다.
4. array 관련함수
scala> a res31: Array[Int] = Array(2, 3, 5, 7, 11) scala> a.sum res32: Int = 28 scala> a.max res33: Int = 11 scala> a.sorted res34: Array[Int] = Array(2, 3, 5, 7, 11) scala> a.mkString(" and ") res35: String = 2 and 3 and 5 and 7 and 11 scala> a res36: Array[Int] = Array(2, 3, 5, 7, 11)
sum, max, sorted 등등 쓸만한것 같다. mkstring같은것도 그렇고.
5. 다차원 배열
방법은 2가지다.
우선 ofDim이라는 메소드를 사용한다.
scala> val matrix = Array.ofDim[Array[Int]](2,3) matrix: Array[Array[Array[Int]]] = Array(Array(null, null, null), Array(null, null, null))
두번째는 new를 사용하는법.
scala> val triangle = new Array[Array[Int]](3) triangle: Array[Array[Int]] = Array(null, null, null)
scala> for(i <- 0 until triangle.length) triangle(i) = new Array[Int](i+1) scala> triangle res44: Array[Array[Int]] = Array(Array(0), Array(0, 0), Array(0, 0, 0))
댓글
댓글 쓰기