array는 같은 type의 element들의 collection이다. array는 index를 통해서 값을 설정하고 반환할 수 있다.
array 특징
1. array는 뭐든지 담을 수 있다.
let ints = [1, 2, 3]
let strings = ["a", "b", "c"]
let people = [Person(), Person(), Person()]
2. array의 size는 고정돼있다.
swift에서는 size를 명시하지는 않는다.
let ints = [Int]()
let strings = [String]()
let people = [Person]()
3. array는 random access를 지원한다.
list는 가능하지만 linked list, stack, queue는 불가능하다.
var array = ["a", "b", "c", "d"]
array.remove(at: 1)
array.insert("b", at: 1)
array.append("e")
- index를 알기때문에 get(4), set(5, "a") 같은 메소드는 O(1)시간(constant time)만큼 걸린다.
Insert
insert는 copy, inserting, incrementing을 통해 실행된다.
copy up
["a", "c", "d"]가
["a", (_), "c", "d"] 된다.
insert
["a", "b", "c", "d"]
incrementing
array의 size를 3에서 4로 increment
- insert는 copy 부분 때문에 insert는 O(n)시간 걸린다.
Delete
delete는 insert와 비슷하다 copy up대신 copy down을 실행한다.
- delete는 O(n)시간 걸린다.
Growing the Size of and Array
add(5)
[1, 2, 3, 4]create new array(size x2)
[( ), ( ), ( ), ( ), ( ), ( ), ( ), ( )]copy & point to new
[1, 2, 3, 4, ( ), ( ), ( ), ( )]insert
[1, 2, 3, 4, 5, ( ), ( ), ( )]
- O(n)시간 걸린다.
What's different about Swift?
array를 정의할 때 size를 명시하지 않는다.
let arrayOfSpecificSize = Array<Int>(repeating: 1, count: 10)
다음 처럼 명시해 줄 수도 있다.