Key의 배열과 Dictionary를 비교하여 Dictionary에 배열되지 않은 값을 삭제합니다
16385 단어 Swift
그러니까 뭘 하고 싶으세요?
여기에 스트링의 배열이 있다.let keys = ["A", "B", "C", "D"]
Dictionary도 있습니다.var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
이에 비해 "E"
이 키는 keys
에 없다dictionary
.
이 "E"
를 삭제하고 싶습니다.
임의의 것을 얻다 dictionary
의 키를 얻어 keys
에 포함되었는지 확인합니다.keys
에서만 정렬 가능let keys = ["A", "B", "C", "D"]
var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
let contains = dictionary.keys.filter { (key) -> Bool in
keys.contains(key)
}
print(contains) // ["B", "A", "C", "D"]
Dictionary만 있는 걸 얻었어요.
아까의 판단을 거꾸로 하면 된다.dictionary
에서만 정렬 가능let nocontains = dictionary.keys.filter { (key) -> Bool in
!keys.contains(key) // !をつける
}
print(nocontains) // ["E"]
Dictionary에만 있는 것 삭제
이후에는 dictionary
에서만 제거됩니다.nocontains.forEach { (removeKey) in
dictionary.removeValue(forKey: removeKey)
}
print(dictionary) // ["B": 1, "A": 0, "C": 2, "D": 3]
확장 Dictionary
그리고 삭제keys
에 포함된 함수도 생성합니다extension Dictionary {
// 引数の配列に含まれていないものを削除
// mutating func removeUnincludedValue(in keys: Array<Key>) {
// self.keys.filter { (key) -> Bool in
// !keys.contains(key)
// }.forEach { (removeKey) in
// self.removeValue(forKey: removeKey)
// }
// }
// 追記: コメント欄で教えてもらった
func removeUnincludedValue(in keys: Array<Key>) -> Dictionary<Key, Value> {
return self.filter { keys.contains($0.key) }
}
// 追記: コメント欄で教えてもらった
func filtered(byKeys keys: Array<Key>) -> Dictionary {
var newDictionary: Dictionary = [:]
var keysIterator = keys.makeIterator()
newDictionary.reserveCapacity(self.count)
while let key = keysIterator.next() {
if let value = self[key] {
newDictionary[key] = value
}
}
return newDictionary
}
// 追記: コメント欄で教えてもらった
mutating func filter(byKeys keys: [Key]) {
self = self.filtered(byKeys: keys)
}
// 追記: コメント欄で教えてもらった
// func filtered(keys: [Key]) -> Dictionary {
// return keys.reduce(into: [Key: Value]()) { dict, key in dict[key] = self[key] }
// }
// 追記: コメント欄で教えてもらったのを、swiftっぽく書いてみた
func filtered(keys: [Key]) -> Dictionary {
return keys.reduce(into: [Key: Value]()) { $0[$1] = self[$1] }
}
// 引数の配列に含まれているものを削除
// mutating func removeIncludedValue(in keys: Array<Key>) {
// self.keys.filter { (key) -> Bool in
// keys.contains(key)
// }.forEach { (removeKey) in
// self.removeValue(forKey: removeKey)
// }
// }
// 追記: もっと簡単に書けた
mutating func removeIncludedValue(in keys: Array<Key>) {
keys.forEach { (removeKey) in
self.removeValue(forKey: removeKey)
}
}
}
키스에 포함되지 않지만 디렉터리에 포함된 내용을 삭제합니다
let keys = ["A", "B", "C", "D"]
var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
dictionary.removeUnincludedValue(in: keys) // ["B": 1, "A": 0, "C": 2, "D": 3]
키스에 포함된 디렉터리에 포함된 내용 삭제
let keys = ["A", "B", "C", "D"]
var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
dictionary.removeIncludedValue(in: keys) // ["E": 4]
유형에 따라 컴파일 오류가 발생할 수 있으므로 안심하십시오
let keys = ["A", "B", "C", "D"]
var dictionary1 = [0: 0, 1: 1, 2: 2]
dictionary1.removeUnincludedValue(in: keys)
// cannot convert value of type '[String]' to expected argument type 'Array<Int>'
"dictionary1
의 키는 Int이므로 keys
Int의 순서대로 배열해 주세요."
최후
나는 갑자기 생각해 보았는데, 해 보니 매우 간단하다.
만약 무슨 잘못이 있으면 저에게 알려주세요. 좀 더 간단하게 할 수 있을까요?
그리고 함수의 명칭에 대한 불안감
Reference
이 문제에 관하여(Key의 배열과 Dictionary를 비교하여 Dictionary에 배열되지 않은 값을 삭제합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hmhmsh/items/83e95fd2eb082d212bd8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let keys = ["A", "B", "C", "D"]
var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
dictionary
의 키를 얻어 keys
에 포함되었는지 확인합니다.keys
에서만 정렬 가능let keys = ["A", "B", "C", "D"]
var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
let contains = dictionary.keys.filter { (key) -> Bool in
keys.contains(key)
}
print(contains) // ["B", "A", "C", "D"]
Dictionary만 있는 걸 얻었어요.
아까의 판단을 거꾸로 하면 된다.dictionary
에서만 정렬 가능let nocontains = dictionary.keys.filter { (key) -> Bool in
!keys.contains(key) // !をつける
}
print(nocontains) // ["E"]
Dictionary에만 있는 것 삭제
이후에는 dictionary
에서만 제거됩니다.nocontains.forEach { (removeKey) in
dictionary.removeValue(forKey: removeKey)
}
print(dictionary) // ["B": 1, "A": 0, "C": 2, "D": 3]
확장 Dictionary
그리고 삭제keys
에 포함된 함수도 생성합니다extension Dictionary {
// 引数の配列に含まれていないものを削除
// mutating func removeUnincludedValue(in keys: Array<Key>) {
// self.keys.filter { (key) -> Bool in
// !keys.contains(key)
// }.forEach { (removeKey) in
// self.removeValue(forKey: removeKey)
// }
// }
// 追記: コメント欄で教えてもらった
func removeUnincludedValue(in keys: Array<Key>) -> Dictionary<Key, Value> {
return self.filter { keys.contains($0.key) }
}
// 追記: コメント欄で教えてもらった
func filtered(byKeys keys: Array<Key>) -> Dictionary {
var newDictionary: Dictionary = [:]
var keysIterator = keys.makeIterator()
newDictionary.reserveCapacity(self.count)
while let key = keysIterator.next() {
if let value = self[key] {
newDictionary[key] = value
}
}
return newDictionary
}
// 追記: コメント欄で教えてもらった
mutating func filter(byKeys keys: [Key]) {
self = self.filtered(byKeys: keys)
}
// 追記: コメント欄で教えてもらった
// func filtered(keys: [Key]) -> Dictionary {
// return keys.reduce(into: [Key: Value]()) { dict, key in dict[key] = self[key] }
// }
// 追記: コメント欄で教えてもらったのを、swiftっぽく書いてみた
func filtered(keys: [Key]) -> Dictionary {
return keys.reduce(into: [Key: Value]()) { $0[$1] = self[$1] }
}
// 引数の配列に含まれているものを削除
// mutating func removeIncludedValue(in keys: Array<Key>) {
// self.keys.filter { (key) -> Bool in
// keys.contains(key)
// }.forEach { (removeKey) in
// self.removeValue(forKey: removeKey)
// }
// }
// 追記: もっと簡単に書けた
mutating func removeIncludedValue(in keys: Array<Key>) {
keys.forEach { (removeKey) in
self.removeValue(forKey: removeKey)
}
}
}
키스에 포함되지 않지만 디렉터리에 포함된 내용을 삭제합니다
let keys = ["A", "B", "C", "D"]
var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
dictionary.removeUnincludedValue(in: keys) // ["B": 1, "A": 0, "C": 2, "D": 3]
키스에 포함된 디렉터리에 포함된 내용 삭제
let keys = ["A", "B", "C", "D"]
var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
dictionary.removeIncludedValue(in: keys) // ["E": 4]
유형에 따라 컴파일 오류가 발생할 수 있으므로 안심하십시오
let keys = ["A", "B", "C", "D"]
var dictionary1 = [0: 0, 1: 1, 2: 2]
dictionary1.removeUnincludedValue(in: keys)
// cannot convert value of type '[String]' to expected argument type 'Array<Int>'
"dictionary1
의 키는 Int이므로 keys
Int의 순서대로 배열해 주세요."
최후
나는 갑자기 생각해 보았는데, 해 보니 매우 간단하다.
만약 무슨 잘못이 있으면 저에게 알려주세요. 좀 더 간단하게 할 수 있을까요?
그리고 함수의 명칭에 대한 불안감
Reference
이 문제에 관하여(Key의 배열과 Dictionary를 비교하여 Dictionary에 배열되지 않은 값을 삭제합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hmhmsh/items/83e95fd2eb082d212bd8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let nocontains = dictionary.keys.filter { (key) -> Bool in
!keys.contains(key) // !をつける
}
print(nocontains) // ["E"]
이후에는
dictionary
에서만 제거됩니다.nocontains.forEach { (removeKey) in
dictionary.removeValue(forKey: removeKey)
}
print(dictionary) // ["B": 1, "A": 0, "C": 2, "D": 3]
확장 Dictionary
그리고 삭제keys
에 포함된 함수도 생성합니다extension Dictionary {
// 引数の配列に含まれていないものを削除
// mutating func removeUnincludedValue(in keys: Array<Key>) {
// self.keys.filter { (key) -> Bool in
// !keys.contains(key)
// }.forEach { (removeKey) in
// self.removeValue(forKey: removeKey)
// }
// }
// 追記: コメント欄で教えてもらった
func removeUnincludedValue(in keys: Array<Key>) -> Dictionary<Key, Value> {
return self.filter { keys.contains($0.key) }
}
// 追記: コメント欄で教えてもらった
func filtered(byKeys keys: Array<Key>) -> Dictionary {
var newDictionary: Dictionary = [:]
var keysIterator = keys.makeIterator()
newDictionary.reserveCapacity(self.count)
while let key = keysIterator.next() {
if let value = self[key] {
newDictionary[key] = value
}
}
return newDictionary
}
// 追記: コメント欄で教えてもらった
mutating func filter(byKeys keys: [Key]) {
self = self.filtered(byKeys: keys)
}
// 追記: コメント欄で教えてもらった
// func filtered(keys: [Key]) -> Dictionary {
// return keys.reduce(into: [Key: Value]()) { dict, key in dict[key] = self[key] }
// }
// 追記: コメント欄で教えてもらったのを、swiftっぽく書いてみた
func filtered(keys: [Key]) -> Dictionary {
return keys.reduce(into: [Key: Value]()) { $0[$1] = self[$1] }
}
// 引数の配列に含まれているものを削除
// mutating func removeIncludedValue(in keys: Array<Key>) {
// self.keys.filter { (key) -> Bool in
// keys.contains(key)
// }.forEach { (removeKey) in
// self.removeValue(forKey: removeKey)
// }
// }
// 追記: もっと簡単に書けた
mutating func removeIncludedValue(in keys: Array<Key>) {
keys.forEach { (removeKey) in
self.removeValue(forKey: removeKey)
}
}
}
키스에 포함되지 않지만 디렉터리에 포함된 내용을 삭제합니다
let keys = ["A", "B", "C", "D"]
var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
dictionary.removeUnincludedValue(in: keys) // ["B": 1, "A": 0, "C": 2, "D": 3]
키스에 포함된 디렉터리에 포함된 내용 삭제
let keys = ["A", "B", "C", "D"]
var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
dictionary.removeIncludedValue(in: keys) // ["E": 4]
유형에 따라 컴파일 오류가 발생할 수 있으므로 안심하십시오
let keys = ["A", "B", "C", "D"]
var dictionary1 = [0: 0, 1: 1, 2: 2]
dictionary1.removeUnincludedValue(in: keys)
// cannot convert value of type '[String]' to expected argument type 'Array<Int>'
"dictionary1
의 키는 Int이므로 keys
Int의 순서대로 배열해 주세요."
최후
나는 갑자기 생각해 보았는데, 해 보니 매우 간단하다.
만약 무슨 잘못이 있으면 저에게 알려주세요. 좀 더 간단하게 할 수 있을까요?
그리고 함수의 명칭에 대한 불안감
Reference
이 문제에 관하여(Key의 배열과 Dictionary를 비교하여 Dictionary에 배열되지 않은 값을 삭제합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hmhmsh/items/83e95fd2eb082d212bd8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
extension Dictionary {
// 引数の配列に含まれていないものを削除
// mutating func removeUnincludedValue(in keys: Array<Key>) {
// self.keys.filter { (key) -> Bool in
// !keys.contains(key)
// }.forEach { (removeKey) in
// self.removeValue(forKey: removeKey)
// }
// }
// 追記: コメント欄で教えてもらった
func removeUnincludedValue(in keys: Array<Key>) -> Dictionary<Key, Value> {
return self.filter { keys.contains($0.key) }
}
// 追記: コメント欄で教えてもらった
func filtered(byKeys keys: Array<Key>) -> Dictionary {
var newDictionary: Dictionary = [:]
var keysIterator = keys.makeIterator()
newDictionary.reserveCapacity(self.count)
while let key = keysIterator.next() {
if let value = self[key] {
newDictionary[key] = value
}
}
return newDictionary
}
// 追記: コメント欄で教えてもらった
mutating func filter(byKeys keys: [Key]) {
self = self.filtered(byKeys: keys)
}
// 追記: コメント欄で教えてもらった
// func filtered(keys: [Key]) -> Dictionary {
// return keys.reduce(into: [Key: Value]()) { dict, key in dict[key] = self[key] }
// }
// 追記: コメント欄で教えてもらったのを、swiftっぽく書いてみた
func filtered(keys: [Key]) -> Dictionary {
return keys.reduce(into: [Key: Value]()) { $0[$1] = self[$1] }
}
// 引数の配列に含まれているものを削除
// mutating func removeIncludedValue(in keys: Array<Key>) {
// self.keys.filter { (key) -> Bool in
// keys.contains(key)
// }.forEach { (removeKey) in
// self.removeValue(forKey: removeKey)
// }
// }
// 追記: もっと簡単に書けた
mutating func removeIncludedValue(in keys: Array<Key>) {
keys.forEach { (removeKey) in
self.removeValue(forKey: removeKey)
}
}
}
let keys = ["A", "B", "C", "D"]
var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
dictionary.removeUnincludedValue(in: keys) // ["B": 1, "A": 0, "C": 2, "D": 3]
let keys = ["A", "B", "C", "D"]
var dictionary = ["A": 0, "B": 1, "C": 2, "D": 3, "E": 4]
dictionary.removeIncludedValue(in: keys) // ["E": 4]
let keys = ["A", "B", "C", "D"]
var dictionary1 = [0: 0, 1: 1, 2: 2]
dictionary1.removeUnincludedValue(in: keys)
// cannot convert value of type '[String]' to expected argument type 'Array<Int>'
나는 갑자기 생각해 보았는데, 해 보니 매우 간단하다.
만약 무슨 잘못이 있으면 저에게 알려주세요. 좀 더 간단하게 할 수 있을까요?
그리고 함수의 명칭에 대한 불안감
Reference
이 문제에 관하여(Key의 배열과 Dictionary를 비교하여 Dictionary에 배열되지 않은 값을 삭제합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hmhmsh/items/83e95fd2eb082d212bd8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)