On May 5, 2012, at 19:45 , Jens Alfke wrote:

> On May 5, 2012, at 4:51 PM, Kyle Sluder wrote:
> 
>> 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.
> 
> But that doesn’t make sense, because the main purpose of -compare: methods is 
> to use for sorting, for methods like -sortUsingSelector: or for 
> NSSortDescriptor. And using -localizedCaseInsensitiveCompare: is pretty 
> common for lists displayed in a UI. So I maintain this is a bug.

It could easily be a bug.

However, even in pure ASCII strings, 'localizedCaseInsensitiveCompare:' doesn't 
support sorting via (say) a binary search. Strings such as "a" and "A" are 
*equal* according to this method. Binary search doesn't work if sorted elements 
are equal according to the comparison function.

The kind of comparison function needed for what we think of as 
case-insensitive-sorted lists of strings needs a function where case isn't 
ignored, but rather where the collating sequence puts case-insensitive-equal 
strings next to each other with a definite order.

The NSString option that apparently causes this is 'NSForcedOrderingSearch', 
but the documentation doesn't really say whether this option is assumed by 
'localizedCaseInsensitiveCompare:' or not. (The documentation for 
'caseInsensitiveCompare:' implies not.)

When we throw a 'ß' into the mix, things just get harder. My understanding is 
that, in German, the uppercase of "laßt" is "LASST". So, "laßt" and "lasst" 
should be equal according to 'localizedCaseInsensitiveCompare:' in a German 
locale, shouldn't they? But they aren't equal on my US-locale system 10.7.3 -- 
I tried it.

So even if we get the right compare options, 'localizedCaseInsensitiveCompare:' 
may not be viable for strings *not* in the language of the current locale.

Note that all of this is prior even to the question of transitivity. If 
'localizedCaseInsensitiveCompare:' isn't suitable for sorting lists of 
mixed-language strings "case-insensitively"**, then delving into its 
transitivity problems seems beside the point. 


** Incidentally, it's no help arguing that "laßt" in this case isn't German but 
just some string with an ess-zett. Case-(in)sensitivity is, in general, a 
language-dependent concept.


_______________________________________________

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

Reply via email to