티스토리 뷰

Swift

Swift ) NSCountedSet

Zedd0202 2018. 1. 22. 14:41
반응형

안녕하세요  :) Zedd입니다.

이런걸..발견해서...바로 NSCountedSet!!!!이게 뭔가 할 수도 있겠지만...뭔지 차근차근 알아봅시다.

먼저 Swift의 Set을 잘 모르신다면 <Collection - Set>글을 읽고와주세요 :)


NSCountedSet



일단 Set!!!! Set이네요. Collection이겠죠?

근데 Counted?뭔가 개수를 센?????뭔가 개수와 관련있는 Set같아 보이는데...

맞습니다!!!


Set의 특징은..일단 순서가없고!! 중복된 값이 없다는게 특징이죠?

근데 만약에 내가!!!내가 이 Set에 어떤값이 몇번들어갔는지를 알고싶다!!!하면 이 NSCountedSet을 쓰면 됩니다. 


Q : 아니 Set자체가 일단 중복된 값이 안들어가는데 몇번 들어갔는지 알 수가 있나;;;;;;걍 한번으로 치는거 아닌가;;;

A : 네!! Set자체가 그렇긴 하지만...그 개수를 셀 수 있도록 해주는것이 NSCountedSet입니다.


예제를 볼게요. 


  1. let myCountedSet = NSCountedSet()


먼저 선언을 이렇게 해주시면 된답니다. Set에 값을 넣는거는 보통 insert나 update였잖아요?

이 NSCountedSet에는 add라는 메소드로 값을 넣어주게 됩니다. 


  1. myCountedSet.add("Zedd")



이렇게요! 그리고 NSCountedSet은 기본적으로 Any타입이라..



  1. myCountedSet.add("Zedd")

    myCountedSet.add(1)



이렇게 타입을 막 넣어도 된답니다. 



  1. class Rect{

        init(){}

    }

    let rect = Rect()

    myCountedSet.add("Zedd")

    myCountedSet.add(1)

    myCountedSet.add(rect)



이것도 물론 가능. 왜냐? Any니까 ㅇㅇ

자..아무튼 이게 NSCountedSet은 아니고!! 이제 해봅시다. 



  1. myCountedSet.add("Zedd")

    myCountedSet.add("Zedd")


제 NSCountedSet에 "Zedd"를 넣게되면!! 제 NSCountedSet. 즉 myCountedSet은 뭐가 들어있을까요?

네!! Set의 특징에 따라 {"Zedd"}. 중복된 값이 없으니까요. 

즉 제가 Zedd를 두번넣어도 하나의 값만 들어가게 됩니다.

그렇지만! 


  1. let zeddCount = myCountedSet.count(for: "Zedd")



이렇게 count메소드를 호출해서 파라미터로 내가 개수를 찾고싶은 값을넣어주면!!!!!




2라는 값이 나오게됩니다. 비록 myCountedSet에는 {"Zedd"}이지만!!! count는 2가 나오게 됩니다 :)

이것이 바로 NSCountedSet의 특징이에요.


별거없죠 ㅎ..........

물론 [String:Int]타입의 Dictionary를 만들어서 해당 key가 몇번을 나왔는지 value로 증가시켜도 되지만... NSCountedSet을 사용하면 별다른 코드없이 알아서 개수를 세주니까...좋을 것 같아요 :)

그리고 Dictionary에서는 Hashable프로토콜을 따르는 타입만 올 수 있었죠!! NSCountedSet은 다 올 수 있다는거? 하지만 개수를 찾을 때, 해당 타입의 개수가 몇개냐ㅑㅑ 이런거는 안된다는거.....XD


저는 항상 뭐 어떤 값이 몇번나오냐 이런거를 매번 Dictionary로 했었는데!!! NSCountedSet도 사용하면 좋을 것 같아요 :)



반응형

'Swift' 카테고리의 다른 글

Swift ) DateDecoding(Encoding)Strategy  (1) 2018.01.23
Swift ) 왕초보를 위한 Codable - CodingKey  (5) 2018.01.23
Swift ) Access Control(접근제어) - (2)  (1) 2018.01.17
Swift ) Sequences와 Lazy  (2) 2018.01.16
Swift ) Inheritance(상속)  (7) 2018.01.15