티스토리 뷰

Swift

Swift3 ) Collection - Set사용해보기

Zedd0202 2017. 7. 12. 21:58
반응형

오늘은 Swift의 Set(집합)에 대해서 알아볼게요.

Set은 배열과 비슷하지만, Dictionary와 마찬가지로 순서를 보장하지 않습니다. 또한 C++이나 Java같은 언어들처럼 중복값을 허용하지 않습니다. 집합이니까 순서는 중요하지않고, 중복값이 없는건 당연하겠죠?

또한, Dictionary와 마찬가지로 해쉬가능한(Hashable)타입만을 담을 수 있습니다.(Swift의 기본 데이터타입은 가능합니다.) (하지만, 커스텀할경우 자신만의 타입을 넣을 수 있는 것 같아요)

Set사용법을 차근차근 알아봅시다.


Set



1. Set 생성


var emptySet = Set<String>()

var emptySet2 : Set<String> = []




2. Set 생성과 동시에 초기화 


var emptySet1 : Set<String> = ["hello","world","zedd"]

var emptySet2 : Set = ["hello","world","zedd"]


※주의 

Set이라고 명시를 해주지 않으면 배열로 인식됩니다. 

var emptySet2 : Set = ["hello","world","zedd"]//Set

var emptySet = ["hello","world","zedd"]//Array(배열)




3. Set에 값 추가 


var emptySet1 : Set = ["hello","world","zedd"]

emptySet1.insert("iOS")

print(emptySet1)//["hello","world","zedd","iOS"]

emptySet1.insert("hello")

print(emptySet1)//["hello","world","zedd","iOS]

//Set 중복된 값을 허용하지 않기때문에 hello 넣어도 이미 hello 있기 때문에 변화가 없다.

emptySet1.update(with: "swift")

print(emptySet1)//["hello","world","zedd","iOS", "swift"]

//다시한번 말씀드리지만, 출력 저렇게 순서대로 안나옵니다..그냥 메소드를 어떻게 쓰는지에만 집중해주세요 :)




4. Set 값 제거 


var emptySet1 : Set = ["hello","world","zedd","swift","iOS"]

emptySet1.remove("swift")//Set에서 swift 찾아서 제거

print(emptySet1)//["hello","world","zedd","iOS"]

emptySet1.remove(at: emptySet1.index(of: "iOS")!)//remove(at:)안에는 index 들어가야합니다. emptySet iOS 가지는 index 제거.

print(emptySet1)//["hello","world","zedd"]

emptySet1.removeAll()

print(emptySet1)//[]

emptySet1.insert(1)//error!

타입이 맞지 않아 생기는 오류입니다. 타입은 한번 결정되면 바꿀 수 없는 것. 아시죠? 원래 emptySet은 String만 담을 수 있는 Set이었기 때문에 Int를 담을 수 없습니다.



5. for문


for index in emptySet1{

    print(index) //hello world zedd

}

//배열과 for 도는법 완전히 똑같습니다 :)




6. set의 특별한 메소드 써보기



Set이 곧 집합이죠? 집합의 연산들을 할 수 있습니다. 

같이 해볼까요? 먼저, 연산을 할 Set 두개를 만들어주고, 해보겠습니다. 


var a :Set = ["hello","world","zedd"]

var b :Set = ["swift","iOS","zedd"]

print(a.intersection(b))//교집합 : ["zedd"]

print(a.symmetricDifference(b))//합집합-교집합 : ["hello", "world","swift","iOS"]

print(a.union(b))//합집합 : ["hello", "world","swift","iOS","zedd"]

print(a.subtracting(b))//여집합 : ["hello", "world"] 주의 : substract아닙니다. 메소드이름에 주의하세요 :)

print(b.subtracting(a))//여집합 : ["swift", "iOS"]


어때요? 신기하죠 ㅎㅎ

간단하게 Set사용법을 알아봤는데..도움이 되었으면 좋겠네요 :)



반응형