컬렉션 타입에 대해서 공부하려고 한다.
컬렉션 타입에는 Array, Dictionary, Set 이라는 타입이 존재한다.
먼가 파이썬에서 쓰는 것과 많이 비슷해 보인다.
1. Array
순서가 있는 리스트 컬렉션
다음과 같이 선언한다.
//MARK: - Array
var integers: Array<Int> = Array<Int>()
var doubles: Array<Double> = Array<Double>()
// 그 외 다양한 표현들
var integers: Array<Int> = [Int]()
var integers: Array<Int> = []
var integers: [Int] = Array<Int>()
var integers: [Int] = [Int]()
var integers: [Int] = []
var integers = [Int]()
Array의 타입이 Int 뿐만 아니라 Double, String 등 기본 데이터 타입을 사용할 수 있다.
그리고 다양한 방법으로 선언해줄 수 있다.
Array 컬렉션에 데이터를 추가하려면 append() 를 사용해서 추가할 수 있다.
순서대로 데이터가 추가된다.
그리고 Int 타입에 Double 타입을 넣을 수 없듯이 데이터 타입과 맞지 않는 값을 입력할 수 없다.
integers.append(1)
integers.append(2)
integers.append(3)
integers.append(4)
integers.append(5)
print(integers)
==================== 출력 결과 ====================
[1, 2, 3, 4, 5]
추가한 순서대로 컬렉션에 추가되어있는 것을 확인할 수 있다.
그리고 컬렉션에 어떤 데이터를 포함하고 있는 지 여부를 확인하려면 contains() 를 사용해서 확인할 수 있다.
컬렉션에 데이터가 포함되어있다면 true, 포함되어 있지 않다면 false 가 출력된다.
// 포함하는지 여부 확인
integers.contains(1)
print(integers.contains(1))
integers.contains(10)
print(integers.contains(10))
=================== 출력 결과 ===================
true
false
위에서 1, 2, 3, 4, 5 를 컬렉션에 추가했다.
1은 포함되어있어 true, 10은 포함되어 있지 않기 때문에 false 를 출력한다.
그리고 Array 컬렉션에서 삭제하려면 다음과 같이 할 수 있다.
remove(at: ) 을 통해 해당 인덱스의 멤버의 값을 삭제
removeLast() 를 통해 마지막 멤버의 값을 삭제
removeAll() 을 통해 멤버 전부 삭제
// 해당 인덱스의 값을 삭제
integers.remove(at: 0)
print(integers)
// 마지막 멤버 삭제
integers.removeLast()
print(integers)
// 전부 삭제
integers.removeAll()
print(integers)
=================== 출력 결과 ===================
[2, 3, 4, 5]
[2, 3, 4]
[]
그리고 컬렉션에 들어있는 멤버의 수를 확인하고 싶다면 count 를 통해서 확인할 수 있다.
var integers: Array<Int> = Array<Int>()
integers.append(1)
integers.append(2)
integers.append(3)
integers.append(4)
integers.append(5)
print(integers)
// 컬렉션에 들어있는 멤버의 수 출력
integers.count
print(integers.count)
=================== 출력 결과 ===================
5
마지막으로 상수로 컬렉션을 선언하면 당연히 변경할 수 없다.
데이터를 추가할 수도 없고 삭제할 수도 없다.
// let 상수로 배열을 선언하게 되면 변경이 불가능하다.
let immutableArray = [1, 2, 3]
2. Dictionary
키와 값의 쌍으로 이루어진 컬렉션이다.
파이썬의 Dictionary와 비슷해보인다.
Key의 값과 짝을 이루는 Value의 값을 가지고 있다.
Array와 비슷하게 여러가지 리터럴 문법을 활용할 수 있다.
* 리터럴 ? 변수에 넣는 변하지 않는 데이터, 데이터 그 자체(메모리 내부 데이터).
리터럴에 대한 내용은 아래에 참고 사이트에 추가해두었다.
딕셔너리 선언하기.
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]()
Array 컬렉션과 마찬가지로 다양한 표현으로 선언이 가능하다.
딕셔너리에 데이터를 추가할 때 Key의 값에 대항하는 Value의 값을 정해준다.
// 키에 해당하는 값을 할당한다.
anyDictionary["someKey"] = "value"
anyDictionary["anotherKey"] = 100
print(anyDictionary)
=================== 출력 결과 ===================
["someKey": "value", "anotherKey": 100]
그리고 키에 해당하는 값을 변경해줌으로써 데이터를 변경할 수 있다.
// 키에 해당하는 값을 변경한다.
anyDictionary["someKey"] = "dictionary"
print(anyDictionary)
=================== 출력 결과 ===================
["someKey": "dictionary", "anotherKey": 100]
그리고 데이터를 삭제하려면 remove()를 사용하는 방법도 있지만
키에 해당하는 값을 nil로 변경하는 방법도 있다.
// 키에 해당하는 값을 제거한다.
anyDictionary.removeValue(forKey: "anotherKey")
print(anyDictionary)
// 키의 값을 nil로 해줌으로써 제거가 가능하다.
anyDictionary["someKey"] = nil
print(anyDictionary)
=================== 출력 결과 ===================
["someKey": "dictionary"]
[:]
remove를 통해서 anotherKey의 값을 삭제하고 someKey의 값을 nil로 해줌으로써
Dictionary 컬렉션에 있는 데이터가 모두 지워진 것을 확인할 수 있다.
그리고 상수로 선언해주면 당연히 키에 해당하는 값을 변경할 수 없다.
// 변하지 않는 딕셔너리 생성
let emptyDictionary: [String: String] = [:]
let initalizedDictionary: [String: String] = ["name": "jaynam", "gender": "male"]
그럼 키를 변경할 수는 없는 걸까?
키를 변경하기 위해서는 찾아보니 현재 키의 할당 값을 지우고 나서 새로운 키로 다시 생성하는 것 같다.
직접적으로 키를 변경할 수 있도록 지원하지는 않는 것 같다.
다른 방법이 있는지 더 찾아봐야겠다.
3. Set
순서가 없고 멤버가 유일한 컬렉션
즉, 중복된 값이 없다.
Array, Dictionary 와 다르게 축약형이 없기 때문에 다양한 표현으로 선언할 수 없다.
Set 선언하기
var intergerSet: Set<Int> = Set<Int>()
Set에 데이터를 추가하려면 insert() 를 사용한다.
그리고 Set 에는 중복된 값을 넣어도 중복되지 않는다.
// insert() 를 통해서 입력 가능
// 순서는 무작위로 정해진다.
intergerSet.insert(1)
intergerSet.insert(2)
// 중복된 값이 없다.
intergerSet.insert(3)
intergerSet.insert(3)
intergerSet.insert(3)
intergerSet.insert(4)
intergerSet.insert(5)
print(intergerSet)
=================== 출력 결과 ===================
[4, 1, 2, 3, 5]
데이터를 넣어보면 3을 3번 중복해서 넣었지만 값이 중복되지 않았고 순서 없이 추가된 것을 확인할 수 있었다.
Array 와 동일하게 값이 포함되어있는지에 대한 여부를 contains() 로 확인할 수 있다.
// 포함 여부 확인
intergerSet.contains(1)
intergerSet.contains(10)
=================== 출력 결과 ===================
true
false
포함되어 있으면 true, 포함되어있지 않으면 false 가 출력된다.
그리고 멤버를 삭제하려면
remove() 를 사용해서 해당 인덱스의 값을 지울 수 있고
removeFirst() 로 첫 번째 값을 삭제할 수 있고
removeAll() 로 전부 삭제할 수 있다.
// remove: 멤버 삭제
intergerSet.remove(5)
print(intergerSet)
intergerSet.removeFirst()
print(intergerSet)
intergerSet.removeAll()
print(intergerSet)
=================== 출력 결과 ===================
[4, 1, 2, 3]
[1, 2, 3]
[]
그리고 컬렉션에 들어있는 멤버의 수를 확인하고 싶으면 count 를 통해 확인할 수 있다.
var intergerSet: Set<Int> = Set<Int>()
intergerSet.insert(1)
intergerSet.insert(2)
intergerSet.insert(3)
// 멤버 개수 확인
intergerSet.count
print(intergerSet.count)
=================== 출력 결과 ===================
3
그리고 Set은 멤버의 유일성이 보장되기 때문에
즉, 중복된 값이 없기 때문에 집합 연산에 유용하게 사용할 수 있다.
// Set은 합집합, 교집합, 차집합 등 집합 연산을 사용할 수 있다.
// 멤버의 유일성이 보장되기 때문에(즉, 중복이 없기 때문에)
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)
=================== 출력 결과 ===================
[3, 4, 5, 6, 7, 1, 2]
// 합집합 오름차순 정렬하기
let sortedUnion: [Int] = union.sorted()
print(sortedUnion)
=================== 출력 결과 ===================
[1, 2, 3, 4, 5, 6, 7]
// 교집합
let intersection: Set<Int> = setA.intersection(setB)
print(intersection)
=================== 출력 결과 ===================
[4, 3, 5]
// 차집합
let subtracting: Set<Int> = setA.subtracting(setB)
print(subtracting)
=================== 출력 결과 ===================
[1, 2]
- 참고 사이트 -
www.edwith.org/boostcamp_ios/lecture/11202
'iOS > Swift' 카테고리의 다른 글
[Swift] 7. 함수 고급 (0) | 2020.09.15 |
---|---|
[Swift] 6. 함수 기본 (func) (0) | 2020.09.08 |
[Swift] 4. Any, AnyObject, nil (0) | 2020.09.07 |
[Swift] 3. 기본 데이터 타입 (0) | 2020.09.07 |
[Swift] 2. 상수와 변수 (0) | 2020.08.31 |