且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

字典键排序选项-按字母顺序然后按数字

更新时间: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 NSArrays 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:.