Привет всем! Первый вопрос здесь, поэтому, пожалуйста, будьте нежны :). Я немного знаком с Objective-C, но у меня есть некоторые проблемы с деталями. Короче говоря, я хочу знать, как я могу выполнить двоичный поиск в NSMutableArray NSDictionaries и в этом поиске искать синтаксис частичной строки. У меня есть NSMutableArray из NSDictionaries, где массив представляет собой список контактов, а каждый NSDictionary — это один контакт (с четырьмя фрагментами информации). Мне удалось отсортировать массив, используя
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:type ascending:YES];
[addressBook sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
где ключ — это пользовательский ключ в словаре. Часть функциональности программы заключается в выполнении поиска по префиксу для каждой части данных в отдельных контактах.
Итак, пока я нашел -indexOfObject:inSortedRange:options:usingComparator: (и, в частности, этот пост, я не могу понять, как настроить поиск как на поиск префикса строки, так и на реализацию синтаксиса блока для самого поиска.
Я пробовал это, но я просто получаю очень полезную ошибку «Ожидаемое выражение», поскольку я предполагаю, что не могу заменить indexOfObjectPassingTest на indexOfObject.
unsigned index2 = [addressBook
indexOfObjectPassingTest:<#^BOOL(id obj, NSUInteger idx, BOOL *stop)predicate#>:^(id obj, NSUInteger idx, BOOL *stop)
inSortedRange:NSMakeRange(0, [addressBook count])
options:NSBinarySearchingFirstEqual
usingComparator:(NSComparator^(id obj1, id obj2)];
Я был бы признателен за любую помощь в том, чтобы заставить -indexOfObject:inSortedRange:options:usingComparator: работать, или если у кого-то есть другое предложение для бинарного поиска в NSArray NSDictionaries, я все уши.
(И да, хотя это для задания алгоритмов, оно не зависит от языка программирования. Я пытаюсь максимизировать скорость, поэтому я думал о массиве каждый раз, когда вы его ищете. Я также думал о создании копий массива сортируется для каждого ключа словаря, но, поскольку мы имеем дело с большими CSV-файлами, это кажется немного чрезмерным, поэтому любые другие асимптотические подсказки для Mac будут НАМНОГО оценены, поскольку их часто трудно найти в документации Apple.)