초기화 및 선언
배열을 선언할 때
선언과 동시에 값을 넣어 초기화 해줄 때에는, 타입을 따로 명시해주지 않아도 요소들의 타입에 따라 자동으로 타입 추론이 이루어진다.
var numArr = [1,2,3,4,5]
var strArr = ["hong", "ssup"]
하지만 빈 배열을 선언할 때에는 다음과 같이 타입을 반드시 명시해 주어야 한다.
그렇지 않으면 Empty collection literal requires an explicit type 이라는 에러가 뜬다.
var emptyStrings = [String]()
var emptyInts: [Int] = []
var emptyArr: [Any] = []
또한 한 배열에 여러가지 자료형 요소들을 넣고 싶다면 explicit type annotation, 즉 Any 타입을 반드시 선언해주어야 한다.
var anyArr:[Any] = [1,2,"hong"]
var anyArr = [1,2,"hong"] as [Any]
연속된 숫자 배열 선언하기
var intArr = var intArr = Array<Int>(1...10) //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
반복되는 값들로 선언하기
var repArr = Array(repeating: 0, count: 10) //[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
var repStrArr = [String](repeating: "냠", count: 10) //["냠", "냠", "냠", "냠", "냠", "냠", "냠", "냠", "냠", "냠"]
값 추가
append(_:) 배열의 맨 뒤에 값 추가 O(1)
append(contentsOf:) 배열 뒤에 여러 요소들을 한꺼번에 추가 += 연산자도 사용 가능
insert(_:at:) 특정 위치에 값 삽입 O(n)
insert(contentsOf:at:) 특정 위치에 여러 요소들을 한꺼번에 삽입
값 제거
remove(at:) 원하는 값의 index로 제거 및 반환 Removes and returns the element at the specified position. O(n)
mutating func remove(at index: Int) -> Element
removeFirst() 첫번째 요소 제거 및 리턴 Removes and returns the first element of the collection. O(n)
removeLast() 마지막 요소 제거 및 리턴
The collection must not be empty. O(1)
mutating func removeFirst() -> Element
mutating func removeLast() -> Element
()안에 인자 값을 넣으면 배열의 맨 앞 또는 맨 뒤에서부터 해당 인자만큼 점프한 인덱스 값을 지우겠다는 의미
var numbers [1,2,3,4,5]
numbers.removeFirst(2) //3 제거 = numbers.remove(at:2)와 같은 표현
numbers.removeLast(1) //5 제거 = numbers.remove(at: numbers.count-2)와 같은 표현
print(numbers) //[1,2,4]
popLast() 마지막 값(optional)을 반환하면서 마지막 값을 제거. O(1)
mutating func popLast() -> Element?
빈 배열일 경우 nil을 반환하며 에러는 발생하지 않는다.
removeAll() 모든 요소 제거. 빈 배열 만들기 O(n)
removeSubrange(_:) 제거하고 싶은 인덱스 범위로 일부 구간을 제거 O(n)
var numbers = [1,2,3,4,5]
numbers.removeSubrange(1..<4) //index 1,2,3 범위의 값을 제거
print(numbers) //[1,5]
dropFirst(_:), dropLast(_:) 을 사용하면 기존 배열은 그대로 두고, 배열의 앞 뒤에서 원하는 만큼 값을 제거한 새로운 배열을 반환한다. O(1) 혹은 O(k)
let numbers = [1,2,3,4,5]
print(numbers.dropFirst(2)) //[3,4,5] 앞에서부터 2개 제거한 새로운 배열 반환
print(numbers.dropFirst(10) //[] 새로운 빈 배열 반환
print(numbers) //[1,2,3,4,5] 기존 배열은 그대로
단, 이 메서드들은 ArraySlice<Element> 형식으로 반환이 되므로, 값을 사용할 때 다음과 같이 다시 배열로 변환해주어 사용할 수 있다.
numbers = Array(numbers.dropLast(3))
값 포함 확인
특정 값을 포함하고 있는지 확인하기 위해서 두가지 방법이 있다.
원하는 값을 찾아 그 값의 index를 받아오고 싶으면 firstIndex(of:)
단순히 특정 값의 포함 여부만 알고 싶다면 contains() 메서드를 사용하면 된다.
firstIndex(of:) 배열에서 특정 값을 찾으면 처음 찾은 항목의 index를 반환하고, 찾지 못하면 nil을 반환 O(n)
contains() 배열 안에 특정 값이 포함되어 있는지 없는지 판단하여 Bool 값을 반환. O(n)
var num = [1,2,3,4]
num.contains(4) //true
num.contains(5) //false
num.firstIndex(of: 4) //3
num.firstIndex(of: 5) //nil
num.index(of: )는 deprecated 되었다고 한다.
값 확인
.first 혹은 .last 는 해당 배열의 처음 or 마지막 인자를 반환한다. 빈 배열일 경우 nil을 반환하는 옵셔널.
Reordering an Array's Elements
sort() mutable한 원본 배열의 값을 변경하여 정렬. O(n log n)
내림차순으로 정렬할 때는 .sort(by: >)
mutating func sort()
sorted() 배열을 정렬한 사본을 리턴. O(n log n)
내림차순으로 정렬할 때는 .sorted(by: >)
func sorted() -> [Element]
reverse() O(n)
Reverses the elements of the collection in place.
mutating func reverse()
reversed() O(1)
Returns a view presenting the elements of the collection in reverse order.
func reversed() -> ReversedCollection<Array<Element>>
//.sort() 원본 배열을 그대로 정렬
array.sort()
//.sorted() 정렬된 배열을 리턴
let sortedArray = array.sorted()
//.reverse() 거꾸로
array.reverse()
//.reversed() 형변환 해서 사용해야
let reversedWord = String(word.reversed())
print(reversedWord)
참고 : 슈프림,
'Algorithm > 참고' 카테고리의 다른 글
[Swift] 2진수 변환 radix (0) | 2022.02.09 |
---|---|
[Swift] reversed() (1) | 2022.01.16 |
[Swift] String 문자열 다루기 (2) | 2022.01.10 |
Swift 정규식 NSRegularExpression (0) | 2022.01.04 |
[Swift iOS] Dictionary 사용법 + dictionaries inside array (0) | 2021.09.10 |