更新时间:2023-02-06 14:19:44
不幸的是,中没有方法NSString
将直接执行此操作。除了编写类别外,我只使用 NSArray
s sortedArrayUsingComparator:
方法:
Sadly there's no method in NSString
that will directly do this. Instead of writing a category, I would just use NSArray
s sortedArrayUsingComparator:
method:
NSArray *sKeysArray = [[listContent ALlKeys] sortedArrayUsingComparator:^(id obj1, id obj2) {
// Code to compare obj1 and obj2 and return an NSComparisonResult here; return NSOrderedAscending if obj1 should come before obj2
}];
要进行每个比较,我将使用 NSString
的 – enumerateSubstringsInRange:options:usingBlock:
传递 NSStringEnumerationByComposedCharacterSequences
作为选项(基本上枚举字符,但Unicode字符序列除外实际上是一个字母的组合)。并且,当您比较两个字符时,请使用类似于 question 来检测obj1是数字,而obj2是常规字母,并返回 NSOrderedDescending
,否则只需使用常规 compare:
。
To do each comparison, I would use NSString
's – enumerateSubstringsInRange:options:usingBlock:
passing NSStringEnumerationByComposedCharacterSequences
for options (basically enumerating characters, except that unicode characters sequences which are actually one "letter" are combined). And when you're comparing two characters, use something like the answer to this question to detect when obj1 is a number and obj2 is regular letter and return NSOrderedDescending
, otherwise just use regular compare:
.