- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 알고리즘
- 정렬알고리즘
- 프로그래머스 level1
- 프로그래머스
- 코딩테스트
- dart
- 감성에세이
- 프로그래머스 swift
- 정렬
- swift split
- Algorithm
- 코테
- swift
- programmers
- rxswift
- 스위프트디자인패턴
- 자료구조
- sort
- swift 알고리즘
- Design Pattern
- programmer
- 프로그래머스 레벨2
- 정렬 알고리즘
- 스위프트
- 디자인패턴
- 다트
- swift 코딩테스트
- 디자인 패턴
- datastructure
- coding test
Bill Kim's Life...
[Swift] Collection Types : Array, Dictionary, Set 본문
Swift5의 클래스와 구조체의 공통점과 차이점에 대해서 살펴봅니다.
#. 개발 환경
- Xcode 11.x 이상
- Swift 5
Collection Types
Swift에서는 콜렉션(리스트) 타입으로 아래의 세가지 형태의 타입을 지원합니다.
그렇다면 위의 세가지 형태의 콜렉션 타입에 대해서 하나하나 살펴보겠습니다.
Array(배열)
배열과 비슷한 형태의 컬렉션으로서 순서(인데스)가 있는 리스트 형태의 컬렉션 타입입니다.
// 빈 Int Array 생성
var integers: Array<Int> = Array<Int>()
// 다른 생성 방법
// var integers: Array<Int> = [Int]()
// var integers: Array<Int> = []
// var integers: [Int] = Array<Int>()
// var integers: [Int] = [Int]()
// var integers: [Int] = []
// var integers = [Int]()
// 추가
integers.append(1)
integers.append(100)
print(integers) // [1, 100]
// 비었는지 확인
if integers.isEmpty {
print("It's empty.")
} else {
print("It's not empty.")
}
// 수정
integers[0] = 99
integers[1] = 10
// 삭제
integers.remove(at: 0)
integers.removeLast()
integers.removeAll()
// 멤버 갯수 확인
print(integers.count)
// 배열 순회
for item in integers {
print(item)
}
Dictionary
키와 값의 쌍으로 이루어진 컬렉션 타입입니다.
// Key가 String 타입이고 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]()
// 추가
anyDictionary["someKey"] = "value"
anyDictionary["anotherKey"] = 100
print(anyDictionary) // ["someKey": "value", "anotherKey": 100]
// 비었는지 확인
if anyDictionary.isEmpty {
print("It's empty.")
} else {
print("It's not empty.")
}
// 수정
anyDictionary["someKey"] = "dictionary"
print(anyDictionary) // ["someKey": "dictionary", "anotherKey": 100]
// 삭제
anyDictionary.removeValue(forKey: "anotherKey")
anyDictionary["someKey"] = nil
print(anyDictionary) // [:]
// 멤버 갯수 확인
print(anyDictionary.count) // 0
Set
마지막으로 Set으로서 순서가 없고 멤버 값에 대해서 유일한 것을 보장(중복값 허용 안함)하는 컬렉션입니다.
// 빈 Int Set 생성
var integerSet: Set<Int> = Set<Int>()
// 추가
integerSet.insert(1)
integerSet.insert(100)
integerSet.insert(99)
integerSet.insert(99) // 99가 이미 있기 때문에 추가 안됨
integerSet.insert(99) // 99가 이미 있기 때문에 추가 안됨
print(integerSet) // [100, 99, 1]
print(integerSet.contains(1)) // true
print(integerSet.contains(2)) // false
// 비었는지 확인
if anyDictionary.isEmpty {
print("It's empty.")
} else {
print("It's not empty.")
}
// 삭제
integerSet.remove(100)
integerSet.removeFirst()
// 멤버 갯수 확인
print(integerSet.count) // 1
// Set 멤버 순회
for item in integerSet {
print("\(item)")
}
Swift에서의 Set에서는 아래와 같은 특별한 기능의 함수도 제공합니다.
- Intersection : 교집합
- SymmetricDifference : 대칭차
- Union : 합집합
- Subtracting : 차집합
그림으로 살펴보면 아래와 같습니다.
// 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) // [4, 6, 5, 1, 2, 7, 3]
// 합집합 오름차순 정렬
let sortedUnion: [Int] = union.sorted()
print(sortedUnion) // [1, 2, 3, 4, 5, 6, 7]
// 교집합
let intersection: Set<Int> = setA.intersection(setB)
print(intersection) // [3, 5, 4]
// 차집합
let subtracting: Set<Int> = setA.subtracting(setB)
print(subtracting) // [2, 1]
// 대칭차
let symDiffSet: Set<Int> = setA.symmetricDifference(setB)
print(symDiffSet) // [6, 2, 7, 1]
또한 아래와 같은 관계도 살펴볼 수 있습니다.
- a는 b의 Superset
- b는 a의 Subset
- b와 c는 서로 Disjoint 관계
let houseAnimals: Set = ["🐶", "🐱"]
let farmAnimals: Set = ["🐮", "🐔", "🐑", "🐶", "🐱"]
let cityAnimals: Set = ["🐦", "🐭"]
// isSubset(of:) : A.isSubset(of:B) : A가 B의 부분집합이면 true 아니면 false 반환
// isSuperset(of:) : B.isSuperset(of:A) : B가 A의 상위 집합이면 true 아니면 false 반환
// isStrictSubset(of:) : subset이면서 subset != superset이면 true 아니면 false 반환
// isStrictSuperset(of:) : superset이면서 subset != superset이면 true 아니면 false 반환
// isDisjoint(with:) : 두 집합 사이에 어떤 공통 값이 없을 때 true, 하나라도 있으면 false 반환
print(houseAnimals.isSubset(of: farmAnimals)) // 참(true)
print(farmAnimals.isSuperset(of: houseAnimals)) // 참(true)
print(houseAnimals.isStrictSubset(of: farmAnimals)) // 참(true)
print(farmAnimals.isStrictSuperset(of: houseAnimals)) // 참(true)
print(farmAnimals.isDisjoint(with: cityAnimals)) // 참(true)
이상으로 Swift에서의 콜렉션 타입에 대해서 살펴보았습니다.
그럼 저희 블로그를 찾아주셔서 감사드리오며 행복한 하루 되시길 바랍니다.
감사합니다.
www.slideshare.net/BillKim8/collection-types
[참고 자료(References)]
[1] 콜렉션 타입 (Collection Types) : https://jusung.gitbook.io/the-swift-language-guide/language-guide/04-collection-types
[2] 컬렉션 타입 : https://yagom.github.io/swift_basic/contents/03_collection_types/
[3] [Swift]Collection Types 정리 : http://minsone.github.io/mac/ios/swift-collection-types-summary
[4] [Swift 공부] 컬렉션 타입이란 ? : https://noahlogs.tistory.com/14
[5] Swift – 함수, 콜렉션 타입 : https://blog.yagom.net/528/
[6] Swift - 컬렉션 타입(Collection Types) : http://seorenn.blogspot.com/2014/06/swift-collection-types.html
[7] [Swift 3] 컬렉션 타입 (Collection Types_Array, Set, Dictionary) : https://beankhan.tistory.com/155
[8] 컬렉션 타입(Collection Types) : https://kka7.tistory.com/141
[9] 3 swift 컬렉션 : https://www.slideshare.net/donggyupark2/3-swift-56764853
[10] [Swift] 016 Working with Collection (컬렉션 사용하기) for beginners : https://creativeworks.tistory.com/entry/Swift-016-Working-with-Collection-컬렉션-사용하기-for-beginners
'CS(컴퓨터 과학) > Swift' 카테고리의 다른 글
[Swift] Access Control : 접근제어(open, public, internal, fileprivate, private) (0) | 2020.06.11 |
---|---|
[Swift] Functions : 함수의 정의와 사용법 (0) | 2020.06.11 |
[Swift] Type Casting : 타입캐스팅에 대해서 알아보자 (0) | 2020.06.11 |
[Swift] Types : Named(명명) Type과 Compound(복합) Type (0) | 2020.06.11 |
[Swift] Method(메소드) : 인스턴스 메소드와 타입 메소드 (0) | 2020.06.11 |