排序NSMutableArray删除第一个元素

时间:2016-06-15 10:38:24

标签: ios objective-c sorting nsmutablearray nsarray

如果NSMutableArray包含如下对象,则以数字方式对其进行排序:

NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"P3",@"P1",@"P4",@"P10", nil];

同样的输出应该是:P1,P3,P4,P10

4 个答案:

答案 0 :(得分:1)

您需要使用NSNumericSearch

[array sortUsingComparator:^NSComparisonResult(NSString*  _Nonnull str1, NSString*  _Nonnull str2) {
    return [str1 compare:str2 options:NSNumericSearch];
}];

来自标题文档 -

  

NSNumericSearch = 64,/ *在10.2中添加;字符串中的数字使用数值进行比较,即Foo2.txt< Foo7.txt< Foo25.txt;仅适用于比较方法,而不是* /

希望这就是你要找的东西。

答案 1 :(得分:0)

假设字符串的开头总是有一个字符,那么:

[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSInteger i1 = [[obj1 substringFromIndex:1] integerValue];
    NSInteger i2 = [[obj2 substringFromIndex:1] integerValue];
    if (i1 > i2)
        return NSOrderedDescending;
    else if (i1 < i2)
        return NSOrderedAscending;
    return NSOrderedSame;
}];

答案 2 :(得分:0)

试试这段代码:

NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"P3",@"P1",@"P4",@"P10", nil];

NSLog(@"Array: %@",array);
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:nil ascending:YES selector:@selector(localizedStandardCompare:)];

NSArray *sorters = [[NSArray alloc] initWithObjects:lastNameDescriptor, nil];

NSArray *sortedArray = [array sortedArrayUsingDescriptors:sorters];

NSMutableArray *sortArray = [[NSMutableArray alloc] init];

[sortArray addObjectsFromArray:sortedArray];

NSLog(@"sortArray : %@",sortArray);

输出:

2016-06-15 16:47:47.707 test[5283:150858] Array: (
P3,
P1,
P4,
P10
)
2016-06-15 16:47:47.708 test[5283:150858] sortArray : (
P1,
P3,
P4,
P10
)

答案 3 :(得分:-1)

您还可以使用NSArray对<{1}}或NSMutableArray进行排序。

NSSortDescriptor