簡體   English   中英

對NSString的NSArray進行排序

[英]Sorting an NSArray of NSString

有人可以告訴我排序NSMutableArray的代碼嗎? 我有以下NSMutableArray:

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

具有諸如“2”,“4”,“5”,“1”,“9”等元素,它們都是NSString。

我想按降序對列表進行排序,以便最大值整數在列表中最高(索引0)。

我嘗試了以下方法:

[arr sortUsingSelector:@selector(compare:)];

但它似乎沒有正確地對我的價值進行排序。

有人能告訴我代碼正確地做我想要完成的事情嗎? 謝謝!

您應該使用此方法:

[arr sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

NSArray或:

[arr sortUsingSelector:@selector(caseInsensitiveCompare:)];

在“inplace”排序NSMutableArray

比較器應返回以下值之一:

  • NSOrderedAscending
  • NSOrderedDescending
  • NSOrderedSame

為字符串編寫自己的比較方法非常簡單:

@implementation NSString(compare)

-(NSComparisonResult)compareNumberStrings:(NSString *)str {
    NSNumber * me = [NSNumber numberWithInt:[self intValue]];
    NSNumber * you = [NSNumber numberWithInt:[str intValue]];

    return [you compare:me];
}

@end

如果數組的元素只是帶有數字而沒有字母的NSStrings(即“8”,“25”,“3”等),這里有一個干凈簡潔的方法,實際上有效:

NSArray *sortedArray = [unorderedArray sortedArrayUsingComparator:^(id a, id b) {
    return [a compare:b options:NSNumericSearch];
}];

完成! 無需編寫返回NSComparisonResult的整個方法,或者返回8行NSSortDescriptor ...

恕我直言,這種數組排序的最簡單方法是

[arr sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"self.intValue" ascending:YES]]]

如果您的數組包含浮點值,只需將鍵更改為self.floatValueself.doubleValue

最簡單的方法是制作像這樣的比較器方法

NSArray *sortedStrings = [stringsArray sortedArrayUsingComparator:^NSComparisonResult(NSString *firstString, NSString *secondString) {
    return [[firstString lowercaseString] compare:[secondString lowercaseString]];
}];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM