5.1 배열
- 값 중복이 허용되고 순서가 있는 컬렉션
- let으로 선언하면 변경할 수 없고 var로 선언하면 변경 가능
var names: [String] = ["dino", "yagom", "dino"]
var emptyArray: [Any] = []
print(names.count)
print(emptyArray.isEmpty)
print(names[2]) // 2번째 인덱스 아이템 get
names[2] = "jenny" // 2번째 인덱스에 아이템 set
print(names[2]) // 2번째 인덱스 아이템이 jenny로 변경됨
//print(names[4]) // 인덱스 범위를 벗어나서 오류 발생
names.append("elsa") // append를 사용해 item 추가
names.append(contentsOf: ["john", "max"]) // contentsOf로 여러개를 같이 추가 할 수 있음
names.insert("happy", at: 2) // 2번째 인덱스에 아이템 추가
names.insert(contentsOf: ["jinhee", "minsoo"], at: 5) // 5번째 인덱스에 여러 아이템 추가
print(names[4]) // 4번째 아이템 get
print(names.firstIndex(of: "dino") ?? -1) // 앞에서 부터 index 찾기
print(names.lastIndex(of: "aaa") ?? -1) // 뒤에서 부터 index 찾기
print(names.first ?? "default") // 첫번째 인덱스 값 get
print(names.last ?? "default") // 마지막 인덱스 값 get
let firstItem: String = names.removeFirst() // 첫번째 인덱스 제거하면서 return
let lastItem: String = names.removeLast() // 마지막 인덱스 제거하면서 return
let indexZeroItem: String = names.remove(at: 0) // 특정 인덱스 제거하면서 return
print(firstItem)
print(lastItem)
print(indexZeroItem)
print(names[1...3])
5.2 집합
- 값 중복이 허용되지 않고 순서가 없는 컬렉션
- 순서가 중요하지 않고 값 유니크한 값을 만들기 위해서 사용
var emptySet: Set<String> = []
var names: Set<String> = ["dino", "chulsoo", "younghee", "dino"]
var numbers = [100, 200, 300] // type을 지정하지 않으면 []는 Array로 인식
print(type(of: numbers)) // Array<Int>
print(emptySet.isEmpty) // true
print(names.count) // 3
names.insert("jenny") // 새로운 값 추가
print(names.count) // 4
print(names.remove("chulsoo")) // Optional("chulsoo")
print(names.remove("john")) // nil -> 값이 없을 때 nil 리턴
집합 연산
let englishStudent: Set<String> = ["john", "chulsoo", "dino"]
let koreanStudent: Set<String> = ["jenny", "dino", "chulsoo", "hana", "minsoo"]
// 교집합 ["chulsoo", "dino"]
let intersectSet: Set<String> = englishStudent.intersection(koreanStudent)
print(intersectSet)
// 여집합의 합(배타적 논리합) ["john", "jenny", "minsoo", "hana"]
let symmetricDiffSet: Set<String> = englishStudent.symmetricDifference(koreanStudent)
print(symmetricDiffSet)
// 합집합 ["minsoo", "dino", "john", "chulsoo", "jenny", "hana"]
let unionSet: Set<String> = englishStudent.union(koreanStudent)
print(unionSet)
// 차집합 ["john"]
let subtractSet: Set<String> = englishStudent.subtracting(koreanStudent)
print(subtractSet)
// 오름차순 정렬 ["chulsoo", "dino", "hana", "jenny", "john", "minsoo"]
print(unionSet.sorted())
5.3 튜플
var person: (String, Int, Double) = ("dino", 29, 180.0)
// 인덱스로 값을 가져올 수 있음
// 이름: dino, 나이: 29, 신장: 180.0
print("이름: \\(person.0), 나이: \\(person.1), 신장: \\(person.2)")
// 인덱스로 값을 변경 할 수 있음
person.1 = 99
person.2 = 190.0
// 이름: dino, 나이: 99, 신장: 190.0
print("이름: \\(person.0), 나이: \\(person.1), 신장: \\(person.2)")
// index 대신 이름 지정해서 사용 가능
var person: (name: String, age: Int, height: Double) = ("dino", 29, 180.0)
// 인덱스로 값을 가져올 수 있음
// 이름: dino, 나이: 29, 신장: 180.0
print("이름: \\(person.name), 나이: \\(person.age), 신장: \\(person.height)")
// 인덱스로 값을 변경 할 수 있음
person.age = 99
person.height = 190.0
// 이름: dino, 나이: 99, 신장: 190.0
print("이름: \\(person.name), 나이: \\(person.age), 신장: \\(person.height)")
5.4 딕셔너리
- key와 value가 쌍으로 구성된 컬렉션 타입
- key는 중복이 될 수 없고 value는 중복이 될 수 있음
- let으로 선언하면 변경할 수 없고 var로 선언하면 변경 할 수 있음
- isEmpty로 비어있는지 확인 가능