집단 자료형(Collective Types)
서로 관련이 있는 자료들을 모아서 관리하기 편하게 만든 것이 집단 자료형이다.
이때 서로 관련이 있다는 말은 자료형이 같거나 한가지 주제에 속해있는(예를들면 신체 정보 - 키, 몸무게, 나이 등) 자료들을 말한다.
집합 자료형의 종류는 다음과 같다.
• 배열(Arrays)
• 집합(Set)
• 딕셔너리(Dictionary, 사전)
이 중 배열(Arrays)을 알아보자.
배열
배열은 같은 자료형의 값들을 일련의 순서(인덱스; Index)로 저장한 자료형이다.
인덱스가 있기 때문에 값을 인덱스로 찾아 바로 접근할 수 있어 편리하다.
또한 인덱스는 자동으로 생성되는 것이기 때문에 중간에 생략되거나 임의로 바꿀수는 없으나 값끼리 순서를 바꿀수는 있다.
스위프트에서 배열의 특징은 아래와 같다.
• 배열에 저장될 데이터의 자료형은 제약이 없으나, 하나의 배열은 한가지의 자료형만 가질 수 있다.
• 초기 선언시 자료형을 명확히 해야한다.
• 크기는 동적으로 확장 가능하다.
타입을 하나만 가질수 있으나 만약 타입을 Any로 선언해버리면 무슨타입이던 다 넣을 수 있긴 하다.
하지만 안정성을 위해서라면 Any타입은 안쓰는게 좋을것 같다.
선언 및 초기화
타입 추론기 덕에 암묵적으로 선언할 수 있지만 2번째 줄처럼 빈 배열 선언시 반드시 명시적으로 타입(자료형)을 써줘야 한다.
//기본적인 선언
var arr1: Array<Int> = []
var arr1: [Int] = []
var arr1: Array = [1, 2, 3, 4]
var arr1 = [1, 2, 3, 4]
Array(repeating: count:)를 사용하면 반복되는 값으로 초기화도 가능하다.
var arr1 = Array(repeating: 0, count:3) // [0, 0, 0]
var arr2 = Array(repeating: 2, count:5) // [2, 2, 2, 2, 2]
var newarr = arr1 + arr2 // [0, 0, 0, 2, 2, 2, 2, 2]
데이터 추가
• append(_: ) : 데이터 추가
• insert(_: at:) : 특정 인덱스에 값을 넣고 삽입한 위치부터 뒤로 한칸씩 밀리며 크기도 증가한다.contentsOf:
를 사용하면 배열 리터럴이나 배열을 이용해 한번에 추가할 수 있다.
var arr1: [Int] = [1]
arr1.append(5) // [1, 5]
var arr1: [Int] = [1]
arr2 = [2, 3]
arr1.append(contentsOf: [2, 3, 4]) // [1, 2, 3, 4]
arr1.append(contentsOf: arr2) // [1, 2, 3, 4, 2, 3]
arr1.insert(10, at:0) // [10, 1, 2, 3, 4, 2, 3]
데이터 삭제
• remove(at: ) : 데이터 삭제
인덱스를 입력해 특정 인덱스에 위치한 값을 삭제한다.
• removeFirst() : 첫번째 데이터 삭제, 인덱스를 넣으면 앞에서부터 인덱스번째 값을 삭제
• removeLast() : 마지막 데이터 삭제, 인덱스를 넣으면 뒤에서부터 인덱스번째 값을 삭제
• popLast() : 마지막 값을 Optional로 반환하면서 삭제(Optional은 중요한 내용이라 나중에 따로 설명한다.)
• removeAll() : 배열 전체 데이터 삭제해 빈 배열이 된다.
• removeSubrange(_: ) : 인덱스 범위를 넣으면 특정 범위만 삭제
• dropFirst(_: ) : 기존배열은 두고 앞부터 n개를 제거한 새로운 배열 반환
• dropLast(_: ) : 기존배열은 두고 뒤부터 n개를 제거한 새로운 배열 반환
//remove(at: )
var arr1 = [1, 2, 3, 4, 5]
arr1.remove(at: 0) //[2, 3, 4, 5]
//removeFirst(), removeLast()
arr1.removeFirst() // [3, 4, 5]
arr1.removeLast() // [3, 4]
//popLast()
print(arr1.popLast()) // Optional(4)
//removeAll()
arr1.removeAll() // []
//removeSubrange(_: )
var arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr2.removeSubrange(2<..6) // [1, 2, 3, 8, 9]
//dropFirst(_: ), dropLast(_: )
print(arr2.dropFirst(2)) //[3, 8, 9]
print(arr2.dropLast(2)) //[3]
기타 함수들
• firstIndex(of: ) : 해당 값이 앞에서부터 최초로 등장하는 인덱스를 Optional로 반환
• lastIndex(of: ) : 해당 값이 뒤에서부터 최초로 등장하는 인덱스를 Optional로 반환
• count : 배열의 크기를 반환한다.
• reverse() : 기존 배열을 뒤집는다. 시간복잡도는 O(n)이다.
• reversed() : 기존 배열은 그대로 두고 뒤집은 배열을 반환한다. 시간복잡도는 O(1)이다.
• sort() : 배열을 오름차순으로 정렬한다.
• sort(by: >) : 배열을 내림차순으로 정렬한다.
• sorted() : 기존 배열은 그대로 두고 오름차순으로 정렬한 배열을 반환한다.
• sotred(by: >) : 기존 배열은 그대로 두고 내림차순으로 정렬한 배열을 반환한다.
스위프트 문법 - 배열(Arrays), swift
'공부 > Apple' 카테고리의 다른 글
[스위프트] 튜플(Tuple) 사용법 & 예시 (0) | 2023.07.07 |
---|---|
[스위프트] 집합(Set) 사용법 & 예시 (0) | 2023.07.07 |
[스위프트] 제어 전달문 (break, continue, return 특징 및 차이) (0) | 2023.07.03 |
[스위프트] 조건문(if, guard, switch) 종류와 사용법 (0) | 2023.07.03 |
[스위프트] 반복문(for ~ in, while, repeat ~ while) 종류와 사용법 (0) | 2023.07.02 |