[Swift]집단 자료형 - 집합(Set)
집합(Set)
같은 타입의 서로 다른 값을 중복 없이 저장할 때, 사용하는 집단 자료형인 Set
배열과 비슷하지만 데이터들이 중복으로 저장되지 않아 무조건 한 개의 값은 한 개뿐 없습니다
정의
집합을 정의할 때는 초기값을 사용하여 정의하거나 빈 집합을 선언하고 초기화하는 과정을 거쳐 정의할 수 있습니다
//정의
Set<Type> ()
var music: Set<String> = ["Hip-hop", "Pop", "Classic"]insert(_:) 집합에 값을 추가하는 방식, 배열에서 append(_:)와 같다
music.insert("ballad")
//결과: ["Hip-hop", "Pop", "Classic", "ballad"]배열과 동일하게 count가 존재합니다(같은 의미)
isEmpty속성의 값이 true(집합이 비어있을 때) 설정됩니다
한번 확인해봅시다
if music.isEmpty {
print("텅~")
} else {
print("\(music.count)개 있다")
}
//결과: 3개 있다순회 탐색
배열과 마찬가지로 for ~ in구문을 이용하여 순회 탐색을 할 수 있습니다
배열처럼 인덱스를 활용하여 순회 탐색을 할 수는 없지만, 순회 속성이 제공되므로 집합 자체를 for ~ in구문에 그대로 넣고 순회 처리하는 방식
var music: Set = ["Hip-hop", "Pop", "Classic"]
for i in music {
print(i)
}
//결과: Pop Classic Hip-hop집합은 원래 순서가 없이 무작위로 나옵니다.
하지만 sort()메소드를 이용하여 정렬된 결과를 받을 수 있다
for i in music.sorted() {
print(i)
}
//결과: Classic Hip-hop Pop동적 추가와 삭제
위에 insert(_:)은 set에 추가, 이번에는 remove(_:)는 말 그래도 인자 값을 삭제하는 메소드입니다
removeAll()는 set안에 모든 값을 삭제하는 메소드 입니다
var music: Set = ["Hip-hop", "Pop", "Classic"]
music.insert("ballad")
//결과: ["Hip-hop", "balled", "Pop", "Classic"] -> 순서와 상관 없이 아무 곳이나 들어간다
music.remove("Pop")
결과: ["Hip-hop", "balled", "Classic"] -> 순서와 상관 없이 삭제가 됩니다
music.removeAll()
if music.isEmpty() {
print("텅~"
} else {
print("값이 존재합니다")
}
//결과: 텅~집합 연산
기본 집합 연산
1)intersection(_:)
두 개의 집합에서 공통되는 값만 가져와서 새로운 집합을 만들어주는 메소드
var a = [1,2,3,4,5]
var b = [4,5,6,7,8]
a.intersection(b).sorted()
//결과: [4,5]2) symmetricDifference(_:)
두 개의 집합에서 공통되지 않은 값만 가져와서 새로운 집합을 만들어주는 메소드
var a = [1,2,3,4,5]
var b = [4,5,6,7,8]
a.symmetricDifference(b).sorted()
//결과: [1,2,3,6,7,8]3)union(_:)
두 개의 집합에서 모든 값을 가져와서 새로운 집합을 만들어주는 메소드
var a = [1,2,3,4,5]
var b = [6,7,8,9,10]
a.union(b).sorted()
//결과: [1,2,3,4,5,6,7,8,9,10]4)subtract(_:)
기준이 되는 집합에서 공통으로 들어간 값만삭제하고 새로운 집합을 만들어주는 메소드
사실 이해가 잘 안갈수도 있으니, 예시를 들어 확인해보자
var a = [1,2,3,4,5]
var b = [0,1,3,6,7]
a.subtract(b).sorted()
//결과: [2,4,5]
//b에서는 1,3이 공통임으로 제거 후에 2,4,5만 따로 새로운 집합됩니다부분집합과 포함관계 판단 연산
1)isSubset(of:)
주어진 집합의 값 전체가 특정 집합에 포함되는지를 판단하여 bool type으로 반환
var a = [1,2,3,4,5]
var b = [2,3,4]
b.isSubset(of:a)
//a안에 b가 포함되어 있나요?
//결과: true2)isSuperset(of:)
주어진 집합이 특정 집합의 모든 값을 포함 하는지 판단하여 bool type으로 반환
var a = [1,2,3,4,5]
var b = [2,3,4]
a.isSuperset(b)
//a안에 b의 모든값이 포함되어 있나요?
//결과: true3)isStrictSubset(of:)와 isStrictSuperset(of:)
위에 두 메소드처럼 주어진 집합이 특정 집합의 부분집합인지 상위집합인지를 판단 하는 역할
4)isDisjoint(with:)
두 집합 사이의 공통 값을 확인하여 공통 값이 없으면 true, 있다면 false 반환
var a = [1,2,3,4,5]
var b = [6,7,8]
a.isDisjoint(b)
//결과: true