ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • swift - Set #1 (Create a Set, Inspecting a Set, Testing MemberShip, Adding and Removing Elements)
    swift 2021. 1. 7. 04:45

    Set

     

    - 배열과 딕셔너리에 비해 많이 사용되지는 않는다.

     

    - 주로 정렬 순서보다 검색 속도가 더 중요한 경우 배열 대신 사용

     


    순서가 없다. 인덱스도 없음

     


    동일한 값은 하나만 저장 -> 있는 값을 저장하면 그냥 무시됨


    동일한 타입만 저장


    배열보다 검색속도가 빠른 이유

    해싱 알고리즘을 사용하기 때문에

     


    Create a Set

    // Set
    // Set은 리터럴이 없고 배열 리터럴을 사용한다.
    let set = [1, 2, 2, 2, 3, 3, 3]
    set.count
    
    let set2 = Set<Int>(set)
    set2.count

    Inspecting a Set

    set2.count
    set2.isEmpty

    Testing for Membership

    // 요소가 포함되어 있는지 확인하는 작업에 제일 많이 사용
    set2.contains(1)

    Adding and Removing Elements

    var words = Set<String>()
    
    // 추가하고 결과를 튜플로 return
    var insertResult = words.insert("Swift")
    
    insertResult.inserted // 추가되었으면 true 안됐으면 false
    insertResult.memberAfterInsert // 추가된 값 or 기존에 있던 값
    
    insertResult = words.insert("Swift")
    insertResult.inserted // 추가되었으면 true 안됐으면 false
    insertResult.memberAfterInsert // 추가된 값 or 기존에 있던 값
    
    // 새로운 요소를 추가하면 nil, update하면 입력한 파라미터 return
    var updateResult = words.update(with: "Apple")
    updateResult
    
    var value = "Swift"
    value.hashValue
    
    updateResult = words.update(with: value)
    updateResult
    
    value = "Hello"
    value.hashValue
    
    updateResult = words.update(with: value)
    updateResult
    
    // Set이 update될때 hash값으로 비교한다.
    
    struct SampleData: Hashable {
        var hashValue: Int = 123
        var data: String
        
        init(_ data: String) {
            self.data = data
        }
        
        static func == (lhs: SampleData, rhs:SampleData) -> Bool {
            return lhs.hashValue == rhs.hashValue
        }
    }
    
    var sampleSet = Set<SampleData>()
    var data = SampleData("Swift")
    data.hashValue
    
    var r = sampleSet.insert(data)
    r.inserted
    r.memberAfterInsert
    sampleSet
    
    data.data = "Hello"
    data.hashValue
    
    // 여기서 다시보면 hashValue가 123으로 고정이기 때문에 문자열이 다르더라도 최신
    // 데이터로 바뀌지 않는다.
    r = sampleSet.insert(data)
    r.inserted
    r.memberAfterInsert
    sampleSet
    
    // 이 때 사용하는 메소드가 update이다.
    sampleSet.update(with: data)
    sampleSet
    
    
    
    // 요소를 삭제
    
    // 하나의 element 삭제 : 삭제 후 삭제된 value 리턴
    words.remove("Swift")
    words
    
    // 존재하지 않는 요소 삭제 : nil 리턴
    words.remove("Ghost")
    
    // 전체요소 삭제
    words.removeAll()

    댓글

Designed by Tistory.