7

NSString'slocalizedCaseInsensitiveCompare:localizedStandardCompare:methods和有什么不一样?

我阅读了参考资料,但没有正确了解该使用哪一个。

4

3 回答 3

12

localizedCaseInsensitiveCompare:相当于:

[aString compare:otherString
         options:NSCaseInsensitiveSearch
         range:NSMakeRange(0,aString.length)
        locale:[NSLocale currentLocale]];

localizedStandardCompare:基本上相当于:

[aString compare:otherString
         options:NSCaseInsensitiveSearch | NSNumericSearch
         range:NSMakeRange(0,aString.length)
        locale:[NSLocale currentLocale]];

因此,主要区别在于如何比较字符串中的数字。

比较以下 3 个字符串 usinglocalizedCaseInsensitiveCompare:将导致以下顺序:

"Foo2.txt",
"Foo25.txt",
"Foo7.txt"

另一方面,比较它们使用localizedStandardCompare:将导致以下顺序:

"Foo2.txt",
"Foo7.txt",
"Foo25.txt"

虽然该localizedCaseInsensitiveCompare:方法一直存在,但localizedStandardCompare:最近才添加(OS X 10.6)。Finder 使用数字方法对文件名进行排序,在添加 之前localizedStandardCompare:,开发人员没有一种简单的方法来确保他们可以像 Finder 那样对字符串进行排序。

在确定使用哪一个时,如果您要比较的字符串代表文件名,那么您绝对应该倾向于使用localizedStandardCompare:.

于 2013-03-15T15:46:49.537 回答
0

后者类似于 OS X 上的 Finder。

于 2013-03-15T15:38:15.867 回答
0

localizedCaseInsensitiveCompare:类似于localizedCompare:

它们都返回一个NSComparisonResult值,该值指示接收器的词法顺序和另一个使用本地化比较的给定字符串。

区别在于前者是case insensitive。即它在比较字符串时忽略了大写和小写字母的不同用法。

localizedStandardCompare 这将比较由 Finder 应用程序排序的字符串。

于 2013-03-15T15:46:13.427 回答