Удалить элементы из Array of Array Swift - PullRequest
0 голосов
/ 27 мая 2019

Для контекста я создаю свой собственный hashmap в 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 голосов
/ 27 мая 2019

Сопоставить внешний массив с новым массивом массивов, где из внутреннего массива сохраняются только элементы с 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 })
0 голосов
/ 27 мая 2019

Вы можете использовать removeAll, где вы фильтруете с contains для сегментов

hashmap.buckets.removeAll { $0.contains { $0.key == -1 } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...