지난 포스팅에 이어,
컬렉션 타입 (Collection Type) 인 Set과 Dictionary을 살펴보도록 하겠습니다.
Set (집합)
중복값을 저장할 수 없고, 순서가 없는 Group 형태의 컬렉션 타입
Set(집합)은
이전 포스팅에서 다룬 Array(배열)와 유사한 성격을 가지고 있습니다.
값을 나열할 수 있으며, 선언방식 또한 동일합니다.
하지만, Set(집합)는 중복된 값을 나열할 수 없습니다!
따라서 특정 Group 혹은 카테고리를 만들때 용이합니다.
정의
- Set ? Group!
- '교집합', '합집합', '차집합'과 같은 '집합연산'시 활용할 수 있는 컬렉션 타입입니다.
- 다양한 연산 메서드와 함께 사용됩니다.
생성과정
- 기본형태
- [Array] 생성형태와 동일하므로 생략합니다.
- 기존 [Array] 선언자리에, ➟ 'Set' 을 작성합니다.
- 유의사항
- 다만, 타입추론이 불가능하므로, 반드시 명시적 타입을 선언해야 합니다.
(만약 'Set' 유형이 아닐 경우, 비교연산 등 메소드 사용이 불가능합니다)
- 다만, 타입추론이 불가능하므로, 반드시 명시적 타입을 선언해야 합니다.
더보기
// Array vs Set (타입추론)
// 타입추론이 가능한 경우 - Array
let myFriends = ["LIME", "JASON", "CARY"]
👉🏻 아하! 타입이 적혀있지 않아도, 상수 'myFriends'는 Array(배열) 이구나!
// 타입추론이 불가능한 경우 - Set
let myFriends: Set = ["LIME", "JASON", "CARY"]
👉 'Set'이 선언이 되어있네? 상수 'myFriends'는 Set(집합) 이구나!
활용방법 및 예시
- 집합연산
- Set은 아래와 같은 형태의 메서드를 사용할 수 있습니다.
- 교집합 / a.intersection(b)
a와 b에 포함된 값 중, 중복되는 값을 나타내는 메서드. - 대칭차 / a.symmetricDifference(b)
중복되는 값을 제외한 값을 나타내는 메서드. 교집합의 반대. - 합집합 / a.union(b)
a와 b값 전부값을 나타내는 메서드. 중복되는 값은 하나만 나타냄. - 차집합 / a.subtracting(b)
a값에서 b값을 제외하는 메서드. 중복되는 값을 제외함
- 교집합 / a.intersection(b)
- Set은 아래와 같은 형태의 메서드를 사용할 수 있습니다.
더보기
// 기본형태 선언 (var&let name : Set<Type>
let firstGroup: Set<Int> = [1,2,3,8]
// 단축형태 선언 (var&let name : Set)
let secondGroup: Set = [1,3,8,9]
⬇︎ 집합연산 methods 실행
// 1. intersection 교집합
firstGroup.intersection(secondGroup) // {1, 3, 8}
// 2. symmetricDifference 대칭차
firstGroup.symmetricDifference(secondGroup) // {2, 9}
// 3. union 합집합
firstGroup.union(secondGroup) // {1, 2, 3, 8, 9}
// 4. subtracting 차집합
firstGroup.subtracting(secondGroup) // {2}
Dictionary (사전)
키(Key)와 값(Value)의 쌍으로 구성된 사전 형태의 컬렉션 타입
정의
- 사전? Dictionary?
- 우리 주변에서 흔히 살펴볼 수 있는 '사전'을 예로 들자면,
- 하나의 '단어'가 있다면, 이에 따른 '해석'이 작성된 형태를 가지고 있습니다.
- Dictionary(사전) 컬렉션 타입이란?
- 키와 값, 즉 쌍으로 이루어진 값이 하나의 초기화 값으로 설정된 타입입니다.
생성과정
- 기본형태
- 선언문 타입 자리에 Dictionary< Type, Type > 형태로 작성합니다.
- < : > 내부의 타입은 각각 Key(단어)와 Value(해석)의 타입입니다.
// var&let name : Dictionary<Type, Type>
var dictionary: Dictionary<String:Int> // Key = String, Value = Int
- 단축형태
- 기본형태 Dictionary< Type:Type >에서 👉🏻 [ Type : Type ] 으로 변경합니다.
// var&let name : [Type: Type]
var dictionary: [String: Int] // Key = String, Value = Int
- 비어있는 형태
- 총 3가지 형태로 선언할 수 있습니다.
- 비어있는 배열의 경우, 반드시 Type을 명시해야 합니다!
// 일반형태
var emptyDic1: Dictionary<Type:Type> = [ : ]
// 단축형태 1
let emptyDic2: [Type:Type] = [ : ]
// 단축형태 2
let emptyDic3 = [Type:Type]() // 새로운 형태
활용방법 및 예시
- 요소 값 할당(초기화)
- Dictionary는 변수(상수)이름 = [Key : Value] 을 작성하여 요소를 대입합니다.
// 요소(Key, Value) 넣기
var someDic1: [String : Int] = [ : ] // 빈 배열 만들기
⬇︎
someDic1 = ["LIME" : 30]
someDic1 // ["LIME" : 30]
- 요소 값 할당 (직접 입력)
- 또한 사용자가 직접 값을 입력 할 수 있습니다.
- '타입추론'에 따라, 유형을 작성하지 않아도 요소값을을 대입할 수 있습니다
// 사용자가 직접 입력하기 1 (일반, 단축형태)
var someDic3: Dictionary<Int, Int> = [2:2, 4:4] // [2:2, 4:4]
var someDic4: [String : Int] = ["MOM" : 1, "DAD" : 2]
// ["MOM" : 1, "DAD" : 2]
// 사용자가 직접 입력하기 2 (타입추론)
var someDic5 = ["A" : 1, "B" : 3, "C" : 5]
- 요소 값 삭제
- 요소값을 지우고 싶다 경우, 이름 = [ : ] 을 선언하며, 기존 타입은 그대로 유지됩니다.
// 요소(Key, Value) 초기화 하기 --- 타입추론
var someDic2 = ["Seoul": 25, "Busan": 28, "Daegu" : 31]
⬇︎ 빈 대괄호 [ : ] 선언
someDic2 = [ : ]
someDic2 // Empty!!
- 요소 값 접근
- Key, Value 값은 호출, 수정 혹은 삭제 할 수 있습니다.
- 요소 접근을 통해 해당 Key나 Value를 사용자화 할 수 있습니다.
// 예시. 학생의 이름과 점수가 기재된 Dictionary!
var scoreDic = ["KIM": 70, "LIME": 95, "JASON" : 80]
// 1. Value값 호출
scoreDic["KIM"] // 70
scoreDic["JASON"] // 80
// 2. Value 값 변경(업데이트)
scoreDic["KIM"] = 99 // 95 ➟ 99로 변경
scoreDic // ["KIM": 70, "LIME": 99, "JASON": 80]
// 3. Key 값 추가
scoreDic["KATE"] = 100 // 'KATE', 100점 Dictionary 추가
scoreDic // ["KIM": 70, "LIME": 99, "JASON": 80, "KATE" : 100]
// 4. Key 값 삭제 (** Optioanl 기능 활용)
scoreDic["KATE"] = nil // Key에 nil을 부여, 해당 데이터를 삭제
scoreDic // ["KIM": 70, "LIME": 99, "JASON": 80]
'iOS > Swift' 카테고리의 다른 글
[iOS/Swift] Type (X) Types (O) (0) | 2022.11.05 |
---|---|
[iOS/Swift] 지정되지 않은 데이터의 나열, Tuple (0) | 2022.11.05 |
[iOS/Swift] Collection Type (Array) (0) | 2022.11.05 |
[iOS/Swift] 반복 제어흐름, Looping Control (0) | 2022.11.04 |
[iOS/Swift] 조건부 흐름제어, Condition Flow Control (0) | 2022.11.04 |
댓글