갈루아의 반서재

벡터


벡터는 중간에 있는 요소를 가져오고자 할 때 유용하다. 인덱스 접근이 필요할 때 유용한 셈이다.

벡터는 대괄호로 둘러싸서 만든다.

벡터에도 first 와 rest 가 등장한다.

1
2
3
4
5
6
7
8
9
 
user=> [:jar1 1 2 3 :jar2]
[:jar1 1 2 3 :jar2]
user=> (first [:jar1 1 2 3 :jar2])
:jar1
user=> (rest [:jar1 1 2 3 :jar2])
(1 2 3 :jar2)
user=>
 
cs


벡터는 인덱스를 통해 요소에 빠르게 접근가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
user=> (nth [:jar1 1 2 3 :jar2] 0)
:jar1
user=> (nth [:jar1 1 2 3 :jar2] 1)
1
user=> (nth [:jar1 1 2 3 :jar2] 2)
2
user=> (nth [:jar1 1 2 3 :jar2] 3)
3
user=> (nth [:jar1 1 2 3 :jar2] 4)
:jar2
 
user=> (nth [:jar1 1 2 3 :jar2] 5)
 
IndexOutOfBoundsException   clojure.lang.PersistentVector.arrayFor (PersistentVector.java:158)
user=>
 
cs


물론 리스트에도 nth 를 사용할 수 있지만, 벡터의 인덱스 접근 성능이 더 좋다. 

리스트는 처음부터 시작해서 원하는 요소까지 가면서 그 요소를 찾는 반면에, 벡터는 전체를 거치지 않고 바로 요소에 접근할 수 있다.