使用字典键对字典数组进行排序

时间:2015-12-16 12:10:42

标签: objective-c nssortdescriptor

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:kRestaurantListDistance ascending:YES selector:@selector(compare:)];
[restaurantList sortUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]];

上面是我的字典值数组餐厅名称和密钥。我使用了以下代码,但没有正确排序。它显示了序列19.3,19.4,2.1,2.1。我认为它只是比较第一个数字

organisation.datapoint_set.filter'timestamp='2014-12-12'

请告诉我正确的代码,以升序排序数组。

3 个答案:

答案 0 :(得分:1)

你可以试试这个:

array = [[NSMutableArray alloc] initWithArray:[array sortedArrayUsingComparator:^(id obj1, id obj2) {
    float distance1 = [[obj1 objectForKey:@"distance"] floatValue];
    float distance2 = [[obj2 objectForKey:@"distance"] floatValue];

    if (distance1 < distance2) {
        return (NSComparisonResult)NSOrderedDescending;
    } else if (distance1 > distance2) {
        return (NSComparisonResult)NSOrderedAscending;
    } else {
        return (NSComparisonResult)NSOrderedSame;
    }
}]];

答案 1 :(得分:0)

如果按第一个数字排序,这意味着您的数字实际上只是字符串。

两种可能的方法:

  1. 然后在排序之前,将它们转换为数字(它在字典中,因此它们必须是NSNumbers而不是简单的浮点数)
  2. 创建您自己的比较方法或块(我通常更喜欢使用initWithKey:ascending:comparator:
  3. 您使用哪种方法取决于您之后对字典所做的操作。如果你以后再次需要数字,1可能是最好的;否则2。

答案 2 :(得分:0)

你可以试试这个。它会起作用:

arrWholeArrImg=[NSMutableArray sortArray:_arrWholeArrImg string:@"CategoryName"];

    +(NSMutableArray *)sortArray:(NSMutableArray *)arr  string:(NSString *)key {
   NSSortDescriptor *sortDescriptor;
   sortDescriptor = [[NSSortDescriptor alloc] initWithKey:key
                                                       ascending:YES];
   NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
   NSArray  *sortedArray = [arr sortedArrayUsingDescriptors:sortDescriptors];
                    arr = [sortedArray mutableCopy];
                    return arr;
    }