Фильтровать массив объектов по имени поля - PullRequest
1 голос
/ 30 мая 2019

Рассмотрим объект Notification со следующими свойствами:

id: String
body: String
repeats: Bool

и рассмотрим массив Notification s, notifications:

let notifications = [Notification(id: "1", body: "body1", repeats: false),
                     Notification(id: "2", body: "body2", repeats: false),
                     Notification(id: "3", body: "body3", repeats: true)]

Как можноЯ использую функцию высшего порядка filter(), чтобы получить массив Strings , соответствующий каждому id?

Другими словами, я хотел бы написать filter() замыкание, которому я передаю свой notifications, и в результате получается:

["1", "2", "3"]

Следовательно, мой оператор сравнения фильтров долженосновываться на имени свойства.Это достижимо?

1 Ответ

4 голосов
/ 30 мая 2019

filter здесь не подходит.filter предназначен для возврата подмножества уведомлений на основе некоторых критериев (например, только повторяющихся уведомлений).

Требуется map, который используется для преобразования данных.

let idList = notifications.map { $0.id }

Вы можете комбинировать их по мере необходимости.Допустим, вам нужен список идентификаторов для повторяющихся уведомлений.

let ids = notifications.filter { $0.repeats }.map { $0.id }
...