본문 바로가기
iOS/Swift 문법 심화 학습

컬렉션 타입 [Collection Types]

by 황민우 2022. 2. 17.

정의

- 컬렉션 타입은 데이터들의 집합으로, Swift에서 컬렉션 타입은 지정된 타입의 데이터 묶음입니다.

- Swift에서 컬렉션 타입으로 Array, Set, Dictionary 세 가지를 지원합니다.

- 세 가지 컬렉션 타입은 변수(var)에 할당하면 변경이 가능하고 상수(let)에 할당하면 변경 불가능합니다.

- Swift에서 컬렉션 타입들은 모두 제네릭 컬렉션으로 구현되어있습니다.

2022.02.08 - [분류 전체보기] - 제네릭 [ Generic ]

 

제네릭 [ Generic ]

정의 - 제네릭 코드는 유연하게 코드를 작성할 수 있습니다. - 재사용함수와 자료형을 어떤 자료형이든 사용하여 작업할 수 있도록 요구사항을 정의합니다. - 코드의 중복을 방지할 수 있습니다.

seagreen83.tistory.com


1, 배열

- 배열 타입은 Array로 적으며, 축약형[Element]으로 사용할 수도 있습니다.

 

배열 생성

빈 배열 생성

// Int형 빈 배열 생성
var someInts = [Int]()

// 배열에 데이터 추가
someInts.append(3)

// 배열 비우기
someInts = []

 

기본 값 빈 배열 생성

- repeating 메서드와 count 메서드를 이용해 기본 값으로 빈 배열을 생성할 수 있습니다.

var threeDoubles = Array(repeating: 0.0, count: 3)

 

다른 배열을 추가한 배열 생성

var threeDoubles = Array(repeating: 0.0, count: 3)
// threeDoubles : [0.0, 0.0, 0.0]
var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
// anotherThreeDoubles : [2.5, 2.5, 2.5]

var sixDoubles = threeDoubles + anotherThreeDoubles
// sixDoubles : [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

 

리터럴을 이용한 배열의 생성

- [Value1, Value2, Value 3] 형태를 이용해 배열을 생성할 수 있습니다.

- 1, 2 번 모두 동일한 배열 생성입니다. (2번은 1번 보다 더 간단하게 선언하는 방법)

1, var shoppingList: [String] = ["Eggs", "Milk"]

2, var shoppingList = ["Eggs", "Milk"]

배열의 접근 및 변경

배열의 원소 개수 확인

var shoppingList = ["Eggs", "Milk"]
print("The shopping list contains \(shoppingList.count) items.")

// The shopping list contains 2 items.

 

배열이 비었는지 확인

var shoppingList = ["Eggs", "Milk"]

if shoppingList.isEmpty {
    print("The shopping list is empty.")
} else {
    print("The shopping list is not empty.")
}

 

배열의 원소 추가

// 기본 배열
var shoppingList = ["Eggs", "Milk"]

// 배열에 원소 추가
shoppingList.append("Four")

// 배열에 원소 추가2
shoppingList += ["Baking Powder"]
shoppingList += [Chocolate Spread", "Cheese", "Butter"]

 

특정 위치 원소 접근

var shoppingList = ["Eggs", "Milk"]

var firstItem = shoppingList[0]
// "Egges"
shoppingList[4..6] = ["Bananas", "Apples"]
// 4, 5, 6번째 인덱스 아이템을 Banana, Apples로 변환
// 즉, 아이템 3개가 2개로 줄었다.

 

특정 위치에 원소 추가/삭제/접근

// 0번 인덱스에 원소 추가
shoppingList.insert("Maple Syrup", at:0)
// 0번 인덱스 원소 삭제
let mapleSyrup = shoppingList.remove(at: 0)
// 0번 인덱스 원소 접근
firstItem = shoppingList[0]

2, Set

- Swift에서 Set은 같은 데이터 타입의 값들을 순서 없이 저장하는 리스트입니다.

- 배열과 비슷하지만, 순서가 없기 때문에 서로 같은 값은 구분할 수 없으며 중복 값은 허용되지 않습니다.

- Swift에서 Set은 순서가 중요하지 않거나, Set에 저장된 각 값들이 유일 값일 때 사용할 것을 권장합니다.

- set을 사용할 때는 축약해서 사용할 경우 Swfit가 배열로 인식하기 때문에 축약형을 사용하지 않습니다.

 

빈 Set 생성

// 빈 set 생성
var letters = Set<Character>()
// set에 데이터 추가
letters.insert("a")
// set 초기화
letters = []

 

배열 리터럴을 이용한 set의 생성

var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]

- 타입추론으로 선언

var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]

Set의 접근 및 변경

Set 원소 개수 확인

// set 생성
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
// set 원소 개수 확인
print("I have \(favoriteGenres.count) favorite music genres.")

 

Set 비었는지 확인

if favoriteGenres.isEmpty {
    print("As far as music goes, I'm not picky.")
} else {
    print("I have particular music preferences.")
}

 

Set 원소 추가/삭제/확인

추가

favoriteGenres.insert("Jazz")

삭제

if let removedGenre = favoriteGenres.remove("Rock") {
    print("\(removedGenre)? I'm over it.")
} else {
    print("I never much cared for that.")
}

확인

if favoriteGenres.contains("Funk") {
    print("I get up on the good foot.")
} else {
    print("It's too funky in here.")
}

Set 명령

let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]

oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sorted()
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]

Set 동등비교와 멤버 여부 확인

- isDisjoint(with:) = 두 값 비교 시 공통 값이 없는 경우 True 반환

let houseAnimals: Set = ["🐶", "🐱"]
let farmAnimals: Set = ["🐮", "🐔", "🐑", "🐶", "🐱"]
let cityAnimals: Set = ["🐦", "🐭"]

houseAnimals.isSubset(of: farmAnimals)
// 참
farmAnimals.isSuperset(of: houseAnimals)
// 참
farmAnimals.isDisjoint(with: cityAnimals)
// 참

3, Dictionary

- Dictionary는 순서없이 키(Key)와 값(Value) 한 쌍으로 데이터를 저장하는 컬렉션 타입입니다.

 

빈 Dictionary 생성

// 생성
var namesOfIntegers = [Int: String]()
// 데이터 추가
namesOfIntegers[16] = "sixteen"
// 초기화
namesOfIntegers = [:]

 

리터럴을 이용한 Dictionary 생성

var airports: [String: String] = = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

 

Dictionary 접근 및 변경

Dictionary 개수 확인

print("The airports dictionary contains \(airports.count) items.")

빈 Dictionary 확인

if airports.isEmpty {
    print("The airports dictionary is empty.")
} else {
    print("The airports dictionary is not empty.")
}

값 할당

airports["LHR"] = "London"

내용 출처

https://jusung.gitbook.io/the-swift-language-guide/language-guide/04-collection-types

'iOS > Swift 문법 심화 학습' 카테고리의 다른 글

Dictionary  (0) 2022.04.19
Optional  (0) 2022.04.12
서브스크립트 [ Subscript ]  (0) 2022.02.15
프로퍼티 [ Properties ]  (0) 2022.02.14
옵셔널 체이닝 [ Optional Chaining ]  (0) 2022.02.10

댓글