NSPredicate, используя какой-либо алгоритм поиска внутри? - PullRequest
1 голос
/ 01 апреля 2012

В настоящее время я использую NSPredicate для поиска по строке.Но у меня около 2000 записей.Поэтому перебор этих записей для поиска с использованием NSPredicate займет некоторое время.

Я просто хочу узнать, использует ли NSPredicate какой-либо алгоритм поиска для внутреннего использования, или я должен использовать какой-либо алгоритм поиска для быстрого поиска?

Я хочу, чтобы мое приложение выполняло поиск как приложение контактов (плавно).Что я должен сделать, чтобы мой поиск был гладким, как приложение контактов.

Спасибо.

1 Ответ

3 голосов
/ 01 апреля 2012

NSPredicate не использует любой алгоритм поиска - все, что NSPredicate делает, представляет ваш запрос.

Это работа любого, кто принимает NSPredicate в качестве опции для выбора алгоритма поиска. В вашем случае, это, вероятно, метод NSArray filteredArrayUsingPredicate:?

Если вы хотите искать данные быстрее, вам придется написать лучший алгоритм самостоятельно, держу пари, что массив просто проходит через каждый элемент и сопоставляет его с предикатом. Не эффективно, но работает на что угодно :)

Попробуйте взглянуть на sqlite (или CoreData), они лучше индексируются, чем обычные массивы.

Или вы можете составить индекс самостоятельно - поместите каждый контакт в словарь, ключом которого является первая буква контакта, - это должно уменьшить количество записей, которые вам нужно искать!

т.е. вместо массива

[ @"Alex", @"Bob", @"Bill", @"Carl" ... ]

Есть словарь

{
  @"A" : [ @"Alex" ],
  @"B" : [ @"Bob", @"Bill" ],
  @"C" : [ @"Carl" ] 
  ...
}

Для строки поиска @"Bi" вам нужно только найти элементы в массиве для @"B".

PS Не забудьте сделать свой словарь регистром / диакритически независимым;)

...