Swift/Swift 기본문법

스위프트 기본문법 - 4. 세트(Set)

728x90

세트(set)

세트는 같은 타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입입니다.

순서가 중요하지 않거나 각 요소가 유일한 값이어야 하는 경우에 사용합니다.

 

세트의 선언과 생성

var names: Set<String> = Set<String>()
var names2: Set<String> = []

var names3: Set<String> = ["kemi", "chulso", "younghee", "kemi"]

// 중복이 제거된 값이 들어감
print(names3.count)             //3
names3.insert("jenny")
print(names3)                   //["chulso", "younghee", "jenny", "kemi"]

 

세트의 사용

var names: Set<String> = Set<String>()
var names2: Set<String> = []

var names3: Set<String> = ["kemi", "chulso", "younghee", "kemi"]

// 중복이 제거된 값이 들어감
print(names3.count)             //3
names3.insert("jenny")
print(names3)                   //["chulso", "younghee", "jenny", "kemi"]

print(names3.remove("kemi"))    //Optional("kemi")
print(names3)                   //["chulso", "younghee", "jenny"]


// 세트는 자신 내부의 값들이 모두 유일함을 보장함으로, 집합관계를 표현하고자 할 때 유용하게 쓰일수 있습니다.

let englishClassStudents: Set<String> = ["john", "chulsoo", "kemi"]
let koreanClassStudents: Set<String> = ["jenny", "kemi", "chulsoo", "hana", "minsoo"]

// 교집합
let intersectSec: Set<String> = englishClassStudents.intersection(koreanClassStudents)
print(intersectSec)                 //["chulsoo", "kemi"]

// 여집합
let symmetricDiffSet: Set<String> = englishClassStudents.symmetricDifference(koreanClassStudents)
print(symmetricDiffSet)             //["jenny", "john", "minsoo", "hana"]

// 합집합
let unionSet: Set<String> = englishClassStudents.union(koreanClassStudents)
print(unionSet)                     //["chulsoo", "jenny", "hana", "kemi", "minsoo", "john"]

// 차집합
let subtracSet: Set<String> = englishClassStudents.subtracting(koreanClassStudents)
print(subtracSet)                   // ["john"]

// 정렬
print(unionSet.sorted())            // ["chulsoo", "hana", "jenny", "john", "kemi", "minsoo"]

 

세트의 활용 - 포함관계 연산

let 새: Set<String> = ["비둘기", "닭", "기러기"]
let 포유류: Set<String> = ["사자", "호랑이", "곰"]
let 동물: Set<String> = 새.union(포유류)

print(새.isDisjoint(with: 포유류))      // 서로 배타적인지 - true
print(새.isSubset(of: 동물))           // 새가 동물의 부분집합인가요 = true
print(동물.isSuperset(of: 포유류))       // 동물은 포유류의 전체 집합인가요 = true
print(동물.isSuperset(of: 새))           //동물은 포유류의 전체 집합인가요 = true

 

set은 자바스크립트에서도 존재해서 익숙하긴 했는데, 빅데이터의 영향인가 일반적으로 쓰이지 않을 거 같은 데이터관리 set 메서드들이 많이 존재하는것 같다. 배열에선 랜덤으로 요소를 선택하는 randomElement나 뒤섞는 shuffle() 메서드도 존재한다.

반응형