這讓我感動不已,我無法拼湊出如何做到這一點。在NSArray中排序數字?
我從plist中獲取我的數組,這個數組充滿了數字(如在plist中設置的)。現在我需要做的就是對它們進行排序,使它們下降,但是我無法解決它。
希望有人能幫忙,謝謝。
這讓我感動不已,我無法拼湊出如何做到這一點。在NSArray中排序數字?
我從plist中獲取我的數組,這個數組充滿了數字(如在plist中設置的)。現在我需要做的就是對它們進行排序,使它們下降,但是我無法解決它。
希望有人能幫忙,謝謝。
嘗試這個代碼?
NSArray *array = /* loaded from file */;
array = [array sortedArrayUsingSelector: @selector(compare:)];
以下將依次遞增的數字進行排序,然後反向結果給降序排列的數字:
NSArray *sorted = [[[array sortedArrayUsingSelector:@selector(compare:)] reverseObjectEnumerator] allObjects];
此之前的問題有其他一些備選方案: Sort an NSArray in Descending Order
它適用於我:
NSSortDescriptor *sortIdClient =
[NSSortDescriptor sortDescriptorWithKey:@"campaignValue"
ascending:NO
comparator: ^(id obj1, id obj2){
return [obj1 compare:obj2 options:NSNumericSearch];
}];
NSArray *sortDescriptors = @[sortIdClient];
NSArray *arrTemp = [self.allCampaignsList sortedArrayUsingDescriptors:sortDescriptors];
這是使用比較塊的許多方法之一。此代碼片段適用於任何需要排序數字的數組。 對於升序:
AscendingArray = [UnsortArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
降序排序:
DescendingArray = [UnsortArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
return (NSComparisonResult)NSOrderedSame;
}];
爲什麼不只是使用NSNumber'比較:'? – vikingosegundo
這樣便解決了問題:
NSArray *array = /* loaded from file */;
array = [array sortedArrayUsingSelector: @selector(compare:)];
請刪除使文本顯示爲代碼的額外縮進 – YakovL
但你會選擇方法的內容是什麼?這是讓我感到滿意的。 –
哪種選擇器方法? –
爲'NSNumber'實例定義了'-compare:'方法:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html#// apple_ref/occ/instm/NSNumber/compare: –