@{@"@Add" : @"Sheikh Zayed Road,Dubai",
@"@Front_Image" : @"http://images.travelnow.com/hotels/1000000/920000/919000/918930/918930_81_z.jpg",
@"@HDes" : @"Property Location-With a stay at Shangri-La Hotel ",
@"@HIndex" : @5,
@"@HName" : @"ShangriLa Hotel Dubai",
@"@Lattitude" : @"25.20798",
@"@Longitude" : @"55.27221",
@"@Max_Price" : @"261.73",
@"@Min_Price" : @"1960.02",
@"@Star_Rating" : @5,
@"@TripAdvisor" : @"4.5 Out of 5 ( 1122 reviews )",
@"@TripAdvisorURL" : @"http://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/4.5-12345-4.gif",
@"@Type" : @"Hotels"}
我希望使用@HIndex
键按降序对其进行排序,但会出现以下错误
[<__NSCFDictionary 0x7fcf75801af0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key HIndex.'
我的代码是
NSSortDescriptor *aSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"@HIndex" ascending:YES comparator:^(id obj1, id obj2) {
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
NSMutableArray *sortedArray = [NSMutableArray arrayWithArray:[self.arrHotelResults sortedArrayUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]]];
答案 0 :(得分:0)
我认为你不能在KVC Collection中使用@
。密钥路径中的@
,它表示特定的聚合函数,例如@count
,@sum
等
简单集合运算符
@count:以NSNumber的形式返回集合中的对象数。
@sum:将集合中的每个对象转换为double,计算总和,并将总和作为NSNumber返回。
@avg:获取集合中每个对象的double值,并将平均值作为NSNumber返回。
@max:使用compare:确定最大值:对象必须支持彼此比较才能使其工作。
@min:与@max相同,但返回集合中的最小值。
相反,你可以这样使用NSComparator
:
NSString *key = @"@HIndex";
NSArray *results = [arrHotelResults sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 objectForKey:key] > [obj2 objectForKey:key]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 objectForKey:key] < [obj2 objectForKey:key]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
NSLog(@"%@", results);
以下是我的测试数据:
NSArray *arrHotelResults = @[
@{@"@HIndex" : @5, @"@HName" : @"XYZ Plaza Hotel Dubai"},
@{@"@HIndex" : @3, @"@HName" : @"Beijing"},
@{@"@HIndex" : @10, @"@HName" : @"Xiamen"},
@{@"@HIndex" : @2, @"@HName" : @"Wuhan"},
@{@"@HIndex" : @1, @"@HName" : @"Taj Palace"}
];
答案 1 :(得分:0)
你可以这样排序
NSMutableArray *sortedArray = [arrHotelResults sortedArrayUsingComparator:^(NSDictionary *obj1, NSDictionary *obj2) {
return [obj1[@"@HIndex"] compare:obj2[@"@HIndex"]];
}].mutableCopy;