3

我有两个 nsmutablearray,一个是距离数组,另一个是包含链接到这些距离的图像的数组。我需要按升序对距离数组进行排序,然后基于此对图像数组进行排序。我试图以距离数组为键制作这两个数组的字典,但是当距离值相同时,在排序后的图像数组中返回相同的图像。谁能帮我解决这个问题。代码如下:

 // Put the two arrays into a dictionary as keys and values
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:_locationImages forKeys:_distances];
    // Sort the first array
    NSArray *sortedFirstArray = [[dictionary allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        if ([obj1 floatValue] > [obj2 floatValue])
            return NSOrderedDescending;
        else if ([obj1 floatValue] < [obj2 floatValue])
            return NSOrderedAscending;
        return NSOrderedSame;
    }];
    // Sort the second array based on the sorted first array
    NSArray *sortedSecondArray = [dictionary objectsForKeys:sortedFirstArray notFoundMarker:[NSNull null]];           
4

2 回答 2

8

您不需要将距离作为关键。只是有一个字典数组。不知何故,这也使排序更容易。

NSMutableArray *dataArray = [NSMutableArray array];
for (int i=0; i<distanceArray.count; i++) {
    [dataArray addObject:@{
       @"distance" : distanceArray[i],
       @"image"    : imageArray[i]
    }];
}
NSArray *sorted = [dataArray sortedArrayUsingDescriptors:@[
                   [NSSortDescriptor sortDescriptorWithKey:@"distance"
                                                 ascending:YES]]];
于 2013-01-29T21:51:15.843 回答
0

您可以将两个数组组合成一个字典数组

arrayElement[@"distance"] = @(someDistance);
arrayElement[@"image"] = someImage;

然后对数组进行排序。

于 2013-01-29T21:50:29.290 回答