对于上下文,我正在快速创建自己的哈希图。
我有一个元素,并将这些元素存储在作为数组数组的存储桶中
struct Element {
var key: Int
var value: Int
}
class MyHashMap {
var buckets : [[Element]] = [[]]
init() {
buckets = [Array(repeating: Element(key: -1, value: -1), count: 2)]
buckets.append([Element(key: 3, value: 4)])
}
}
我想删除密钥为-1且正在挣扎的所有存储桶。
Flatmap没有返回正确的类型 即
hashmap.buckets.flatMap{$0}.filter{$0.key != -1}
不正确。
如何使用键-1删除所有存储桶?
答案 0 :(得分:0)
您可以使用removeAll
在其中用contains
进行过滤的水桶
hashmap.buckets.removeAll { $0.contains { $0.key == -1 } }
答案 1 :(得分:0)
将外部数组映射到新的数组数组,其中内部数组仅保留带有key != -1
的元素。我将其作为MyHashMap
类的方法:
class MyHashMap {
// ...
func compactBuckets() {
buckets = buckets.map { $0.filter { $0.key != -1 }}
}
}
另一种方式(并且可能更有效率),并循环遍历外部数组的索引:
func compactBuckets() {
for i in buckets.indices {
buckets[i].removeAll(where: { $0.key == -1 })
}
}
在任何一种情况下,您可能还希望从外部数组中删除空的内部数组:
buckets.removeAll(where: { $0.isEmpty })