Swift

Swift | Collection (컬렉션)에 관하여 2- Set

ziziDev 2024. 5. 11. 00:54
반응형

안녕하세요!

저번에 이어서 Set을 정리하고자 합니다

 

Array에 대하여 궁금하다면

클릭해주세요!!

 

 

Collection

 

 

Set (집합)

 

집합을 나타내는 데이터 구조입니다

집합은 구조체로 이루어져있어 배열과 동일하게 .으로 멤버함수에 접근하여 다양하게 활용이 가능합니다

 

특징

중복되지 않는 고유 값을 컬렉션에 정리하여 저장시켜줍니다

순서가 정해져 있지 않고 X hashable하게 저장되어 집니다

 

Set은 배열과 비슷하지만 중복 요소를 자동적으로 제거하면서 순서가 보장되지 않습니다

하지만 유일한 값을 효율적으로 관리할 수 있고 중복된 항목을 제거하는데 유용합니다

 

여기서 궁금할 수 있는 Hashable이란??

 

배열은 저장할 때마다 자동적으로 인덱스가 정해지면서 들어가지만

Set같은 경우 Hash값(hash value)이 부여되면서 해시 연산을 통해서 값이 접근이 됩니다

그래서 배열처럼 순서가 정해지지 않습니다

마찬가지로 Dictionary도 동일한 Hash값을 통해 접근하여 순서가 없습니다

그래서 이렇게 hash value에 저장된 요소를 저장하는 버킷(bucket)구조를 사용합니다

 

그리고 Set은 평균적으로 상수시간 O(1)에 요소를 추가하고 검색할 수 있기 때문에 매우 효율적입니다

 

Set의 초기화

 

배열과 동일하게 초기화의 구조를 가지고 있습니다

 

 

Set으로 사용하고 동일한 임의의 숫자를 넣었습니다

출력하게되면

동일한 숫자는 없어진걸로 나와있으며

숫자의 순서도 마음대로 출력되는걸 확인할 수 있습니다

 

 

Set

 

주어진 요소를 무조건 세트에 삽입을 하는데

여기서 이미 포함된 경우나 동일하게 있는 경우 추가 삽입이 이루어지지 않습니다

 

 

새로운 요소를 추가할 때 이미 있는 요소가 없을 때 포도가 추가된것을 확인할 수 있습니다

 

요소를 중복해서 추가하지 않고 유일한 값만을 추가하고자 할 때 유용하게 사용됨

 

그리고 Set은 배열과 동일하게 추가 제거가 동일하답니다 :)

그대신 추가하더라도 출력할 때 동일한게 있다면 한 번만 출력된다는 점!

 

그리고 Set의 특징은

집합 연산을 수행할 수 있는 다양한 메서드가 있습니다

이러한 메서드를 사용하여

부분집합, 상위집합, 서로소, 합집합 등의 연산을 수행할 수 있습니다

 

교집합은 intersection을 사용하여 새로운 Set를 만들어냅니다

 

 

대칭 차집합은 exclusiveOr을 사용했지만 지금은

symmetricDifference

을 사용합니다

 

챗 GPT의 오류를 엿볼 수 있었다..

응?... 출력이 이런식으로 된다고?? 그럴리가 없는데

실행을 하니 다르게 나오네

 

그러니 챗 GPT 맹신하지 맙시다 ^_^

 

 

Set에 있는 모든 요소를 포함하는 새로운 Set을 생성할 수 있습니다

(합집합)

첫 번째에서 두 번째 Set에 포함된 요소를 제거하게 됩니다

 

 

 

이렇게 부분집합을 확인하거나 상위집합 유무와 서로소인지 확인하는 Bool을 반환값으로 가지고 있는

메서드도 확인할 수 있었습니다

 

그리고 만약 Set를 정렬하고 싶다면

 

Sort()를 사용하면 된답니다 :)

그럼 자연적으로 배열로 정렬이 된답니다!

반응형