스위프트의 컬렉션(Collection) - 데이터바구니
- Array(배열) - 데이터를 순서대로 저장하는 컬렉션, 순서O
- Dictionary(딕셔너리) - 데이터를 키와 값으로 하나의 쌍으로 만들어관리, 순서X
- Set(집합) - 수학에서의 집합과 비슷한 연산을 제공, 순서X
배열(Array)
- 데이터를 순서대로 저장하는 컬렉션 (자동으로 순번 지정됨)
- 배열의 문법 약속
- [] 대괄호로 묶는다. 배열의 인덱스의 시작은 0부터 (모든 프로그래밍 언어 공통 사항)
- 1개의 배열에는 동일한 타입의 데이터만 담을 수 있다.
- (순서가 있기 때문에) 값은 중복 가능
var numsArray = [1, 2, 3, 4, 5]
let numsArray1 = [20, 2, 7, 4, 5, 7]
var stringArray = ["Apple", "Swift", "iOS", "Hello"]
let emptyArray1: [Int] = []
let emptyArray2 = Array<Int>()
let emptyArray3 = [Int]()
배열의 기본 기능
var numsArray = [1, 2, 3, 4, 5]
numsArray.count
numsArray.isEmpty
numsArray.contains(1)
numsArray.contains(8)
numsArray.randomElement()
numsArray.swapAt(0, 1)
배열의 각 요소(element)에 대한 접근
numsArray = [1, 2, 3, 4, 5]
stringArray = ["Apple", "Swift", "iOS", "Hello"]
stringArray.first
stringArray.last
stringArray.startIndex
stringArray.endIndex
**endIndex를 통해서 배열의 마지막 요소를 가지고 오고 싶으면 -1**
stringArray[stringArray.endIndex - 1]
stringArray[stringArray.index(before: stringArray.endIndex)]
stringArray.index(0, offsetBy: 2)
stringArray.firstIndex(of: "iOS")
stringArray.lastIndex(of: "iOS")
if let index = stringArray.firstIndex(of: "iOS") {
print(index)
}
삽입하기(insert)
var alphabet = ["A", "B", "C", "D", "E", "F", "G"]
alphabet.insert("c", at: 4)
alphabet.insert("c", at: alphabet.endIndex)
alphabet.insert(contentsOf: ["a","b","c"], at: 0)
alphabet.insert(contentsOf: ["a","b","c"], at: alphabet.endIndex)
교체하기(replace)
alphabet = ["A", "B", "C", "D", "E", "F", "G"]
alphabet[0] = "a"
alphabet[0...2] = ["x", "y", "z"]
alphabet[0...1] = []
alphabet.replaceSubrange(0...2, with: ["a", "b", "c"])
추가하기(append)
alphabet = ["A", "B", "C", "D", "E", "F", "G"]
alphabet += ["H"]
**
alphabet.append("H")
alphabet.append(contentsOf: ["H", "I"])
삭제(제거)하기(remove)
alphabet = ["A", "B", "C", "D", "E", "F", "G"]
alphabet[0...2] = []
alphabet.remove(at: 2)
alphabet.removeSubrange(0...2)
alphabet = ["A", "B", "C", "D", "E", "F", "G"]
alphabet.removeFirst()
alphabet.removeFirst(2)
alphabet.removeLast()
alphabet.removeLast(2)
alphabet.removeAll()
배열의 기타 기능
var nums = [1, 2, 3, 1, 4, 5, 2, 6, 7, 5, 0]
nums.sort()
nums.sorted()
nums.reverse()
nums.reversed()
배열의 비교
let a = ["A", "B", "C"]
let b = ["a", "b", "c"]
a == b
a != b
반복문과의 결합
nums = [10, 11, 12, 13, 14]
for tuple in nums.enumerated() {
print(tuple)
print("\(tuple.offset) - \(tuple.element)")
}
딕셔너리(Dictionary)
- 딕셔너리의 문법 약속
- [] 대괄호로 묶는다. (쌍을 콜론으로 처리)
- 키값은 유일해야함 / 중복 불가능(구분하는 요소이기 때문에) 밸류값은 중복 가능
- 1개의 딕셔너리에는 동일한 자료형 쌍의 데이터만 담을 수 있음
- 키값은 Hashble 해야함 - 해쉬함수에서 input으로 쓰일수있는 타입이어야함
- swift의 기본타입은 모두 Hashable하다(custom 타입은 불가)
Hashable(Key)
- 내부적으로 구현되어있는 알고리즘(어떤알고리즘인지는 알 필요없음)
- 해쉬함수를 거치면 고정된길이의 숫자 or 글자이면서 유일한 값이 나옴
- 배열처럼 하나하나 비교할필요 없이 hash값으로 바로 요소를 찾을수있다(빠름)
var dic = ["A": "Apple", "B": "Banana", "C": "City"]
let dic1 = [1: "Apple", 2: "Banana", 3: "City"]
var words: [String: String] = [:]
let words1: Dictionary<Int, String>
let emptyDic1: Dictionary<Int, String> = [:]
let emptyDic2 = Dictionary<Int, String>()
let emptyDic3 = [Int: String]()
딕셔너리의 기본 기능
dic = ["A": "Apple", "B": "Banana", "C": "City"]
dic.count
dic.isEmpty
dic.contains { (key, value) in
key == "A" && value == "Banana"
}
dic.contains { $0.key == "A" }
if let tuple = dic.randomElement() {
print(tuple)
print("\(tuple.key) 그리고 \(tuple.value)")
}
딕셔너리의 각 요소(element)에 대한 접근
dic = ["A": "Apple", "B": "Banana", "C": "City"]
dic["A"]
if let a = dic["A"] {
print(a)
} else {
print("Not found")
}
업데이트 (update) - 삽입하기 / 교체하기 / 추가하기
words = [:]
words["A"] = "Apple"
words["B"] = "Banana"
words["B"] = "Blue"
words.updateValue("City", forKey: "C")
words.updateValue("City", forKey: "C")
words = ["A": "A"]
💡 딕셔너리는 append 함수를 제공하지 않음 - 순서가 없기때문에
딕셔너리 삭제하기
dic = ["A": "Apple", "B": "Banana", "C": "City"]
dic["B"] = nil
dic.removeValue(forKey: "A")
dic.removeValue(forKey: "A")
dic.removeAll()
세트(집합)
- Set의 문법 약속
- 생김새는 배열과 같음(따라서, 생성시 타입을 선언 해야함)
- 수학에서의 집합과 동일하기 때문에 요소는 유일해야함(순서가 존재하지 않음)
var set: Set = [1, 1, 2, 2, 3, 3, 3]
let set1: Set = [1, 2, 3]
let set2: Set<Int> = [1, 2, 3]
let emptySet: Set<Int> = []
let emptySet1 = Set<Int>()
Set의 기본기능
set.count
set.isEmpty
set.contains(1)
set.randomElement()
업데이트 (update) - 삽입하기 / 교체하기 / 추가하기
set.update(with: 1)
set.update(with: 7)
삭제하기
var stringSet: Set<String> = ["Apple", "Banana", "City", "Swift"]
stringSet.remove("Swift")
stringSet
stringSet.remove("Steve")
stringSet.removeAll()
stringSet.removeAll(keepingCapacity: true)
💡 Set을 정렬하면, 배열로 리턴함 (정렬은 순서가 필요하기 때문)
Set의 활용(집합의 활용)
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [1, 3, 5, 7, 9]
c = [2, 4, 6, 8, 10]
d = [1, 7, 5, 9, 3]
b.isSubset(of: a)
b.isStrictSubset(of: a)
a.isSuperset(of: b)
a.isStrictSuperset(of: b)
d.isDisjoint(with: c)
var unionSet = b.union(c)
var interSet = a.intersection(b)
var subSet = a.subtracting(b)
var symmetricSet = a.symmetricDifference(b)
:0