Swift: как удалить элемент из набора настраиваемых объектов на основе настраиваемого условия (функция более высокого порядка) - PullRequest
0 голосов
/ 07 мая 2020

Предположим, у меня есть Set настраиваемых объектов (например, Person), примерно так:

struct Person: Hashable {
let name: String
let age: Int
}

let persons: Set<Person> = [Person(name: "Willy", age: 25), Person(name: "Jenny", age: 22)]

Если бы мне пришлось удалить все элементы с указанным c именем, я бы не смог найдите метод Set для этого случая. В Array есть такой метод, который называется:

@inlinable public mutating func removeAll(where shouldBeRemoved: (Element) throws -> Bool) rethrows

Но по какой-то причине я не могу найти эквивалент в Set.

Итак, моим решением было выполнить быстрое преобразование для удаление происходит примерно так:

var arr = Array(persons)

arr.removeAll {
    $0.name == "Willy"
}

persons = Set(arr)

Есть ли какое-либо прямое решение в Set вместо использования Array в качестве посредника?

Ответы [ 2 ]

1 голос
/ 07 мая 2020

set = set.filter { $0.value != 1 }

0 голосов
/ 07 мая 2020

Вы можете использовать фильтр более высокого порядка, чтобы создать новый набор, исключающий объекты со свойством имени «Willy»:

let persons: Set<Person> = [
   Person(name: "Willy", age: 25),
   Person(name: "Jenny", age: 22)
]

let set = persons.filter{$0.name != "Willy"}
...