본문 바로가기
iOS/Swift

[iOS/Swift] Collection Type (Set, Dictionary)

by iosdevlime 2022. 11. 5.

지난 포스팅에 이어,

컬렉션 타입 (Collection Type) SetDictionary을 살펴보도록 하겠습니다.

 

 


 

 

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값을 제외하는 메서드. 중복되는 값을 제외함
더보기
SetVennDiagram : The swift programming language swift 5.7
// 기본형태 선언 (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]

 

 

 

 

 

댓글