>>> If I'm right, then sort order and search order are different, and you can't >>> expect to use a binary search here. (Not unless you originally used >>> pair-wise 'localizedCaseInsensitiveCompare' to manually sort the list of >>> strings.) >> >> All comparisons, including those used for the original sorting, were done >> using the same comparison method/locale. And the sort order and search order >> need to be same, otherwise any algorithms that rely on the transitive nature >> of comparisons (eg: quicksort, binary search, etc) will fail. > > If I understand Quincey correctly, that's exactly what he's saying: the > semantics of localizedCaseInsensitiveCompare: might be such that it is not > appropriate for such algorithms.
As Jens mentioned, that doesn't make any sense. What good is a localized comparison method if not for sorting a list for display? I suppose you could be implying that Cocoa's sorting methods aren't optimized to assume comparisons are transitive (or special cases problematic strings/comparisons), but that seems quite unlikely. Actually, it's possible to test indirectly. I bet we could construct a set of strings that sorts differently depending on the input order. Ah yes: - (void) testSorting { NSArray* words = [NSArray arrayWithObjects:@"laso", @"lassos", @"las", @"moo", @"lasso", @"aaa", @"lassoMore", @"le", @"mum", nil]; NSString* problemWord = @"laßt"; SEL sortSelector = @selector(localizedCaseInsensitiveCompare:); NSArray* sorted = [[words arrayByAddingObject:problemWord] sortedArrayUsingSelector:sortSelector]; // words should sort consistently, no matter where the problem word is inserted NSUInteger count = [words count]; for( NSUInteger insertIndex = 0; insertIndex < count; insertIndex++ ) { NSMutableArray* testSort = [[words mutableCopy] autorelease]; [testSort insertObject:problemWord atIndex:insertIndex]; [testSort sortUsingSelector:sortSelector]; STAssertTrue( [testSort isEqual:sorted], @"sorted array should always be the same" ); } } That fails 5 of out the 9 loop iterations. Well, I'm certainly very happy that Apple implements all the Unicode collation rules for us for various locales! But I think this must be classified as a bug. ~Martin _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com