-
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()
'swift' 카테고리의 다른 글
swift - Iterating Collections(for-in, foreach) (0) 2021.01.07 swift - set #2 (Comparing Sets, Combining Sets) (0) 2021.01.07 swift - Dictionary #3 (Comparing Dictionaries, Finding Elements) (0) 2021.01.07 swift - Dictionary #2 (Adding Keys and Values) (0) 2021.01.07 swift - Dictionary #1 (Creating a Dictionary , Inspecting a Dictionary, Accessing key and value) (0) 2021.01.07