Dog foot print

[SWIFT] Set 집합 본문

IOS/Swift

[SWIFT] Set 집합

개 발자국 2021. 7. 1. 20:24

Set이란 ?

Array와 다르게 Set은 공통된 값을 배열내에 저장 할 수 없는 자료구조입니다. Array를 통해 Set을 구현 할 수도 있지만, 스위프트에서는 기본 집단 자료형으로 Set을 제공합니다.

선언 및 초기화

import UIKit

let countrySet : Set= ["korea","korea","usa","japan","china"];
let nonset = ["korea","korea"];

//["usa", "korea", "china", "japan"]
//["korea", "korea"]

Set의 리터럴은 배열과 동일한 [] 대괄호를 사용한다. 그렇기에, 타입 어노테이션으로 Set을 표시하지 않는다면, 배열로 인식되게 된다. 다음은 집합을 생성하는 다양한 예제이다.

let stringSet : Set<String> = ["korea","usa"]; //초기화 및 타입 선언
let numberSet = Set<Int>(); //초기화만
var boolSet : Set<Bool>; //변수 선언만
boolSet = [true,false]

Set 또한 배열과 동일하게, 초기 선언에서 집합내의 자료형들을 제네릭 형식으로 명시해줄 수 있다.

집합 동적 삭제 및 추가

var stringSet : Set<String> = ["korea","usa"];

stringSet.insert("japan");
stringSet.insert("china");
stringSet.insert("england");

print(stringSet);
["korea", "japan", "england", "usa", "china"]
stringSet.remove("japan");
print(stringSet)
["korea", "england", "usa", "china"]
stringSet.remove(at: stringSet.startIndex);
print(stringSet)
["england", "usa", "china"]
stringSet.removeAll()
print(stringSet)
[]
  • insert : 집합의 마지막 인덱스 + 1 자리에 전달인자로 들어온 값을 넣는다.
  • remove : 전달인자로 들어온 값을 집합에서 일치하는 버킷에서 삭제한다.
  • remove(at : ) : int가 아닌 Set.Index 자료형의 값에 해당하는 값을 삭제한다.
  • removeAll() : 집합 내에 있는 모든 값을 삭제한다.

순회

var stringSet : Set<String> = ["korea","usa"];

stringSet.insert("japan");
stringSet.insert("china");
stringSet.insert("england");

for country in stringSet{
    print(country);
}

japan
usa
england
korea
china

집합 또한 iterable한 자료형이기 때문에, 일반적인 배열처럼 for in문을 통해 순회가 가능하다.

기본 집합 연산

var oddNubmer : Set = [1,3,5,7,9]
let evenNubmer : Set = [0,2,4,6,8]
let primeNubmer : Set = [1,2,3,5,7,11];

oddNubmer.intersection(primeNubmer).sorted()//교집합
oddNubmer.symmetricDifference(primeNubmer).sorted()//대칭차
oddNubmer.union(primeNubmer).sorted()//합집합
oddNubmer.subtract(primeNubmer);
oddNubmer.sorted()

[1,3,5,7];
[2,9,11];
[1,2,3,5,7,9,11];
[9];
  • intersection : 교집합으로 전달인자로 전달된 집합과 공통되는 원소들만 가진 집합을 리턴한다.
  • symmetricDifference : 대칭차로 두 집합의 공통되지 않은 원소들만 가진 집합을 리턴한다.
  • union : 합집합으로 두 집합의 모든 원소를 가진 집합을 리턴한다.
  • subtract : 차집합으로 두 집합의 공통되지 않은 원소만 남기고 메서드 실행 집합의 원소를 모두 지운다.

부분 집합과 포함관계 판단 연산

var oddNubmer : Set = [1,3,5,7,9]
let evenNubmer : Set = [0,2,4,6,8]
let primeNubmer : Set = [1,2,3,5,7,11];

oddNubmer.isSubset(of: primeNubmer)
oddNubmer.isSuperset(of: primeNubmer)
oddNubmer.isDisjoint(with: evenNubmer)
oddNubmer.isStrictSubset(of: primeNubmer)

false
false
true
false
  • isSubset : 주어진 집합의 값 전체가 메서드 실행 집합에 포함되는지를 판단하여, boolean 값을 리턴한다.
  • isSuperset : 주어진 집합이 특정 집합의 모든 값을 포함하는 지 판단한다.
  • isDisjoint : 주어진 집합이 공통되지 않음을 판단한다.
  • isStrictSubset : 주어진 집합이 메서드 실행 집합의 원소를 모두 포함하며, 다른 값이 하나라도 있는지를 판단한다.

#swift

반응형

'IOS > Swift' 카테고리의 다른 글

[SWIFT] Optional  (0) 2021.07.05
[SWIFT] Dictionary  (0) 2021.07.05
[SWIFT] 문자열 보간법과 트리플 쿼우팅  (0) 2021.06.30
[SWIFT] 기본 자료형[2]  (0) 2021.06.29
[SWIFT] 기본 자료형 및 숫자 타입  (0) 2021.06.29
Comments