gpt4 book ai didi

objective-c - 按字母顺序排序,数字在开头

转载 作者:行者123 更新时间:2023-12-03 17:30:22 24 4
gpt4 key购买 nike

我有一个像这样的数组值:{apple, queen, microsoft, 50cent}。我想按字母顺序对数组进行排序,最后按 50cent 排序。我正在使用以下方法,但它将 50cent 排序在顶部:

[albums sortUsingDescriptors:[NSArray arrayWithObject:
[[[NSSortDescriptor alloc]
initWithKey:@"name"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]
autorelease]]];

最佳答案

您可以使用comparator blocks .

在您的情况下,该 block 应该执行以下操作:

  • 检查两个字符串的第一个字母,是数字还是字母,做return [obj1 compare:obj2]

  • 如果第一个对象以数字开头,但第二个对象以字母开头,return NSOrderedAscending ,如果是相反的话,return NSOrderedDescending

要获取第一个字母,请使用 [obj1 substringToIndex:1]

<小时/>

这个想法的完整代码:

NSArray *array = [NSArray arrayWithObjects:@"peach",@"apple",@"banana",@"ananas",@"50cents", @"papaya", nil];

array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSString *s1 = [obj1 substringToIndex:1];
NSString *s2 = [obj2 substringToIndex:1];

if ([s1 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location == [s2 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location) {
return [obj1 compare:obj2];
} else {
if ([s1 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location == NSNotFound) {
return NSOrderedAscending;
}
}
return NSOrderedDescending;
}];

当您使用sortUsingDescriptors:时,您必须使用 NSMutableArray。您可以使用带有比较器的就地排序 sortUsingComparator: .

[array sortUsingBlock:<The block stays the same>];

关于objective-c - 按字母顺序排序,数字在开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10381235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com