2012-10-02 20 views
1

我有兩個陣列,都充分的NSString的對象是這樣的:由「最近距離」第一排序2個NSMutableArrays

NSMutableArray *titles = [[NSMutableArray alloc] initWithObjects:@"Title1", @"Title2", @"Title3", @"Title4", @"Title5", nil]; 

NSMutableArray *distances = [[NSMutableArray alloc] initWithObjects:@"139.45", @"23.78", @"347.82", @"10.29", @"8.29", nil]; 

我怎麼能在最近的距離第一兩個數組排序?

那麼結果會是這樣:

titles = @"Title5", @"Title4", @"Title2", @"Title1", @"Title3" 
distances = @"8.29", @"10.29", @"23.78", @"139.45", @"347.82" 

我明白NSSortDescriptor可以在這種情況下,但通過文件看後可以使用,我仍然不確定如何。

回答

1

我的距離這樣排序...

NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
[f setNumberStyle:NSNumberFormatterDecimalStyle]; 

NSArray *sortedDistances = [listItem sortedArrayUsingComparator: ^(id a, id b) { 
    NSNumber *aNum = [f numberFromString:a]; 
    NSNumber *bNum = [f numberFromString:b]; 
    return [aNum compare:bNum]; 
}]; 

我想不出一個特別快速的方法來獲取相關聯的標題排序,但這應該工作...

NSMutableArray *sortedTitles = [NSMutableArray array]; 
NSDictionary *distanceTitle = [NSDictionary dictionaryWithObjects:titles forKeys:distances]; 

for (NSString *distance in sortedDistances) { 
    NSString *associatedTitle = [distanceTitle valueForKey:distance]; 
    [sortedTitles addObject:associatedTitle]; 
} 
0

這裏有一個例子我如何通過距離值排序字典的數組:

-(void)reorderByDistance { 
    NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:@"distance" ascending:YES]; 
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName]; 
    self.contentArray = [self.contentArray sortedArrayUsingDescriptors:sortDescriptors]; 
} 

而且我的字典裏是這樣的:

NSDictionary *dict1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"1", @"id", @"Business #1", @"name", @"This business does some pretty remarkable things", @"description", @"Alley Bar", @"category", @"1.2", @"distance", nil]; 
+0

謝謝!你可以舉一個你NSMutableDictionary看起來像NSLogging的小例子嗎? –

+0

檢查我的編輯,我已經添加了字典的樣子。 – Brayden

1

您可以使用NSComparator塊,並使用NSArray的sortedArrayUsingComparator方法。在該塊上,您將收到兩個要比較的對象,並根據比較結果,可以使用NSMutableArray exchangeObjectAtIndex:withObjectAtIndex:方法更改標題的值。

0

一種方法是創建一個字典映射職稱的距離,距離排序,然後通過遍歷距離重新創建標題:

NSMutableArray *titles = [[NSMutableArray alloc] initWithObjects:@"Title1", @"Title2", @"Title3", @"Title4", @"Title5", nil]; 

NSMutableArray *distances = [[NSMutableArray alloc] initWithObjects:@"139.45", @"23.78", @"347.82", @"10.29", @"8.29", nil]; 

//Create a map of current titles to distances 
NSDictionary *titleDistanceMap = [NSDictionary dictionaryWithObjects:titles forKeys:distances]; 

//Need to sort the strings as numerical values 
[distances sortUsingComparator:^(NSString *obj1, NSString *obj2) { 

    return [obj1 compare:obj2 options:NSNumericSearch]; 
}]; 

//Now re-populate the titles array 
[titles removeAllObjects]; 

for (NSString *distance in distances){ 
    [titles addObject:[titleDistanceMap objectForKey:distance]]; 
}