2012-10-02 19 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]]; 
}