Я пробовал следующий метод для поиска объекта с помощью двоичного поиска, но в результате возникает некоторая величина для мусора.indexOfObject: inSortedRange: options: usingComparator возвращает неверный индекс
NSArray *orderedSet = [[NSArray alloc]initWithObjects:@2,@3,@5,nil];
NSLog(@"%@",orderedSet);
NSLog(@"%lu",(unsigned long)[orderedSet indexOfObject:@3 inSortedRange:NSMakeRange(0, 3) options:NSBinarySearchingFirstEqual usingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj2 compare:obj1];
}]);
Он выводит 9223372036854775807, может ли кто-нибудь сообщить мне, что я делаю неправильно здесь.
Обратите внимание, что если вы '[obj1 сравнения: obj2]' вместо '[obj2 сравнения: obj1]' это работает , Может быть, намек на то, почему. – Larme
Это работает, но не получает логики, какие технические изменения она делает. –
Я просто нашел еще один интересный момент: если вы делаете 'NSInteger index = [orderedSet indexOfObject: @ 3 inSortedRange и т. Д.]' С вашим кодом, он равен 'NSNotFound'. Это интересно, потому что возврат должен быть NSUInteger (без отрицательного индекса). Я протестировал на Simulator iPhone 4S (может быть связан с 32-м и 64-мя битами). Теперь, почему он не находит его с вашим «пользовательским сравнением», может быть связано с тем, как он написан. Может быть, вводить в заблуждение, потому что ваш первый First, массив нужно сортировать, а ваш тип и компаратор «возвращены/противны». – Larme