Я пытаюсь узнать чудесный мир NSPredicate, но я не могу практиковаться. Любые рекомендации приветствуются.NSPredicate для фильтрации массива словарей (Swift)
В частности, я хочу использовать NSPredicate для фильтрации массива словарей. Например, возьмите следующий массив и отфильтруйте его только до тех записей, где «species» == «dog».
var arrayofDictionary:[[String:String]] = [
["name": "Ben", "species": "human"],
["name": "Harp", "species": "dog"],
["name": "Guinness", "species": "dog"]
]
Теперь я знаю, как фильтровать следующий путь, но я понимаю, что это «ленивый» способ сделать это, и не будет работать так же быстро, делая большие вычисления:
let filteredArray = arrayofDictionary.filter { $0["species"] == "dog" }.flatMap { $0 }
Так Я играю с NSPredicate и чувствую, что следующее может быть хорошим стартовым местом, но я не уверен, как его использовать. Кроме того, возможно, это работает только для массива, а не для словарей?
let speciesPredicate = NSPredicate(format: "species == %@", "dog")
Благодарим за помощь!
я только смог найти рекомендации по этому вопросу в Objective-C here. К сожалению, я только начинаю поднимать Свифт.
Это было a good tutorial on NSPredicate, чтобы начать обнимать мою голову, но я не мог понять, как полностью реализовать для упомянутого выше случая.
Где вы слышали, что с помощью быстрых затворов * "является„ленивый“способ сделать это, и не будет работать так быстро, когда делая большие вычисления "*? Я ВСЕГДА буду идти на закрытие, они типичны и не подвержены ошибкам рефакторинга. Но я думаю, что вы можете и должны отказаться от «flatMap». – luk2302
Спасибо за отзыв! Что делает flatMap точно? Просто любопытно, почему вы рекомендуете его бросить. Ура! – Ben