본문 바로가기
공부/스위프트

[스위프트] 배열(Arrays) 사용법 & 예시

by 초코팅촉 2023. 7. 3.
728x90

집단 자료형(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