/**
Set(집합)
*/
var set: Set = [1,2,4,5,6]
print(set)
// 순서가 보장이 안됨.
// 생성시 타입을 선언해야한다.
// 각 요소는 유일한 값 - Hashable, 중복안됨
// 검색속도가 아주 빠름, 순서는 없음.
// 집합의 수학적인 개념을 다룰 때 사용
// 검색속도가 빨라야할 때 사용
// 중복해서 저장하지 않았을 때
// 기본문법
let set1: Set<Int> = [1,2,4,5,6]
// 단축문법
let set2: Set = [1,2,4,5,6]
/**
빈 Set의 생성
*/
let emptySet1: Set<Int> = []
let emptySet2 = Set<Int>()
/**
Set의 기본 기능
*/
set.count
set.isEmpty
set.contains(1)
set.randomElement()
/**
업데이트 (update) - 삽입/교체/추가 하기
*/
set.update(with: 1) // Int? 기존의 1을 준다.
set.update(with: 7) // 새로운 요소가 추가되면 ===> 리턴 nil
set
/**
삭제(제거) 하기
*/
var stringSet: Set<String> = ["Apple","Banana","City","Swift"]
stringSet.remove("Swift")
stringSet
stringSet.remove("Steve") // nil 반환
stringSet.removeAll()
stringSet.removeAll(keepingCapacity: true)
/**
Set의 활용
*/
/**
비교
*/
var a1: Set = [1,2,3,4,5,6,7,8,9]
var b1: Set = [1,3,5,7,9]
var c1: Set = [2,4,6,8,10]
var d1: Set = [1,7,5,9,3]
a1 == b1
a1 != b1
b1 == d1
a1 = [1,2,3,4,5,6,7,8,9]
b1 = [1,3,5,7,9]
c1 = [2,4,6,8,10]
d1 = [1,7,5,9,3]
// 부분집합
b1.isSubset(of: a1) // 부분집합 여부
b1.isStrictSubset(of: a1) // 진부분집합 여부
// 상위집합
a1.isSuperset(of: b1) // 상위집합 여부
a1.isStrictSuperset(of: b1) // 진상위집합 여부
// 서로소 여부 (완전 다른 집합이니?)
d1.isDisjoint(with: c1)
/**
합집합
*/
var unionSet = b1.union(c1)
b1
//b1.formUnion(c1) // 원본을 변경 (b1)
/**
교집합
*/
var interSet = a1.intersection(b1)
//a1.formIntersection(b1) // 원본변경
/**
차집합
*/
a1.subtracting(b1)
//a1.subtract(b1) // 원경변경
/**
대칭차집합
*/
var symmetricSet = a1.symmetricDifference(b1)
//a1.formSymmetricDifference(b1) // 원본 변경
/**
반복문과 결합
*/
let newSet: Set = [1, 2, 3]
for num in newSet {
print(num)
}
var nowArray: Array = newSet.sorted() // sorted 는 set 자체를 변경하는것이 아니다.