从数组Swift数组中删除元素

时间:2019-05-27 07:36:13

标签: swift

对于上下文,我正在快速创建自己的哈希图。

我有一个元素,并将这些元素存储在作为数组数组的存储桶中

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删除所有存储桶?

2 个答案:

答案 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 })