05. 컬렉션 타입(Array, Dictionary, Set)

22715 단어 swiftswift

생각해보기

다음과 같은 경우에는 각각 어떤 컬렉션 타입을, 상수/변수 선언 중 어떤 것을 사용하면 유용할지 생각해 봅시다.

  • 영어 알파벳 소문자를 모아두는 컬렉션
  • 책의 제목과 저자 정리를 위한 컬렉션
  • Boostcamp iOS 수강생 명부 작성을 위한 컬렉션

컬렉션 타입

  • Array : 순서가 있는 리스트 컬렉션
  • Dictionary : 'Key'와 'Value'의 쌍으로 이루어진 컬렉션
  • Set : 순서가 없고, 맴버가 유일한 컬렉션

Array

  • 맴버가 순서(Index)를 가진 리스트 형태의 컬렉션 타입
  • 여러가지 리터럴 문법을 활용할 수 있어 표현 방법이 다양

선언 및 생성

var integers: Array<Int> = Array<Int>()

// 위와 동일한 표현
var integers: Array<Int> = [Int]()
var integers: Array<Int> = []
var integers: [Int] = Array<int>()
var intergers: [Int] = [Int]()
var integers: [Int] = []
var integers = [Int]()

활용

맴버 추가

integers.append(1)
integers.append(100)

// Int 타입이 아니므로 Array에 추가할 수 없습니다
// integers.append(101.1)
print(integer)

[1, 100]

맴버 포함 여부 확인

print(integers.contains(100)
print(integers.contains(99)

true
false

맴버 교체

integers[0] = 99

맴버 삭제

integers.remove(at:0)
integers.removeLast()
integers.removeAll()

맴버 수 확인

print(integers.count)
// 인덱스를 벗어나 접근하려면 익셉션 런타임 오류발생
// integers[0]

0

불변 Array

let immutableArray = [1, 2, 3]

// 수정이 불가능한 Array이므로 맴버를 추가할거나 삭제할 수 없습니다
// immutableArray.append(4)
// immutableArray.removeAll()

Dictionary

  • 'Key'와 'Value'의 쌍으로 이루어진 컬렉션 타입
  • Array와 비슷하게 여러가지 리터럴 문법을 활용할 수 있어 표현 방법이 다양함

선언 및 생성

// Key가 Srting 타입이고 Value가 Any인 빈 Dictionary 생성
var anyDictionary: Dictionary<String, Any> = [String: Any]()

// 위와 동일한 표현
var anyDictionary: Dictionary<String, Any> = Dictionary<String, Any>()
var anyDictionary: Dictionary<String, Any> = [:]
var anyDictionary: [String: Any] = Dictionary<String, Any>()
var anyDictionary: [String: Any] = [String: Any]()
var anyDictionary: [String: Any] = [:]
var anyDictionary = [String: Any]()

활용

Key에 해당하는 값 할당

anyDictionary["someKey"] = "value"
anyDictionary["anotherKey"] = 100

print(anyDictionary)

["somekey": "value", "anotherKey": 100]

Key에 해당하는 값 변경

anyDictionary["someKey"] = "dictionary"
print(anyDictionary)

["someKey": "dictionary", "anotherKey": 100]

Key에 해당하는 값 제거

anyDictionary.removeValue(forKey: "anotherKey")
anyDictionary["someKey"] = nil
print(anyDictionary)

[:]

불변 Dictionary

let emptyDictionary:[String:String] = [:]
let initializedDictionary:[String:String] = ["name":"yagom", "gender":"male"]

// 불변 Dictionary이므로 값 변경 불가
// emptyDictionary["Key"] = "value"

// 키에 해당하는 값을 다른 변수나 상수에 할당하고자 할 때는 옵셔널과 타입 캐스팅 파트에서 다룸
// "name"이라는 키에 해당하는 값이 없을 수 있으므로 String 타입의 값이 나올 것이라는 보장이 없음

// 컴파일 오류가 발생
// let someValue: String = initializedDictionary["neme"]

Set

  • 중복되지 않는 맴버가 순서없이 존재하는 컬렉션
  • Array, Dictionary와 다르게 축약형이 존재하지 않음

선언 및 생성

var integerSet: Set<Int> = Set<Int>

// insert: 새로운 맴버 입력
// 동일한 값은 여러번 insert해도 한번만 저장됨
integerSet.insert(1)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(100)

print(integerSet)

{100, 99, 1}

맴버 포함 여부 확인

print(integerSet.contains(1))
print(integerSet.contains(2))

true
false

맴버 삭제

integerSet.remove(99)
integerSet.removeFirst()

멈버 개수

integerSet.count

활용

// 멤버의 유일성이 보장되기 때문에 집합 연산에 활용하면 유용함
let setA: Set<Int> = [1, 2, 3, 4, 5]
let setB: Set<Int> = [3, 4, 5, 6, 7]

합집합

let union: Set<Int> = setA.union(setB)
print(union)

[2, 3, 5, 6, 7, 3, 1]

합집합 오름차순 정렬

let sortedUnion: [Int] = union.sorted()
print(sortedUnion)

[1, 2, 3, 4, 5, 6, 7]

교집합

let intersection: Set<Int> = setA.intersection(setB)
print(intersection)

[5, 3, 4]

차집합

let subtracting: Set<Int> = setA.subtracting(setB)
print(subtracting)

[2, 1]

내 생각

  • Array : 한가지 타입으로 여러개의 값(중복을 허용)을 순서가 있게 저장하고 싶은 때
  • Dictionary : 'Key'와 'Value' 형태로 1대1 매칭을 필요로 할 때
  • Set : 한가지 타입으로 여러개의 값(중복을 허용하지 않음)을 순서가 없게 저장하고 싶을 때

좋은 웹페이지 즐겨찾기