-
swift - Dictionary #3 (Comparing Dictionaries, Finding Elements)swift 2021. 1. 7. 04:24
Comparing Dictionaries
- Dictionary는 순서가 없다 ! 잘 기억
let a = ["A": "Apple", "B": "Banana", "C": "City"] let b = ["A": "Apple", "C": "City", "B": "banana"] a == b // false // 대소문자 구분 없이 비교하려면 // 밑에 코드는 실행할때 마다 값이 다르게 return된다? -> Dictionary는 순서가 없기 때문에 원하는 순서대로 비교하지 않는다. //a.elementsEqual(b) { (lhs, rhs) -> Bool in // print(lhs.key, rhs.key) // return lhs.key.caseInsensitiveCompare(rhs.key) == .orderedSame && // lhs.value.caseInsensitiveCompare(rhs.value) == .orderedSame //} // 어떤 기준이든 key를 정렬한 후 정렬된 key를 가지고 비교해야 한다. // key 오름차순 정렬 let akeys = a.keys.sorted() let bkeys = b.keys.sorted() a.keys.elementsEqual(bkeys) { (lhs, rhs) -> Bool in guard lhs.caseInsensitiveCompare(rhs) == .orderedSame else { return false } guard let lv = a[lhs], let rv = b[rhs], lv.caseInsensitiveCompare(rv) == . orderedSame else { return false } return true }
Finding Elements
var words = ["A": "Apple", "B": "Banana", "C": "City"] let c:((String, String)) -> Bool = { print($0.0) print($0.1) return $0.0 == "B" || $0.1.contains("i") } words.contains(where: c) let r = words.first(where: c) r?.key r?.value // 조건을 만족하는 모든 요소가 리턴 words.filter(c)
'swift' 카테고리의 다른 글