valueForKeyPath:@" @ max.self"数字为100时不起作用

时间:2017-01-12 07:46:48

标签: objective-c nsarray max

NSArray *vals = {100,100,50,50,50}
maximumValue = [[vals valueForKeyPath: @"@max.self"] intValue];

返回

  

maximumValue:50

2 个答案:

答案 0 :(得分:0)

你可能有一个字符串数组。当比较为字符串时,“50”大于“100”,因为5在1之后。你需要先转换为整数,然后取最大值。

不幸的是,ObjC没有map功能,所以你需要手动完成。

NSMutableArray *intArray = [NSMutableArray array];
for (NSString *val in vals) {
    [intArray addObject:@(val intValue)];
}
maximumValue = [[intArray valueForKeyPath: @"@max.self"] intValue];

修改

根据Sulthan的建议,您还可以执行以下操作:

NSArray *a = @[ @"50", @"100" ];
NSLog(@"%@", [[a valueForKeyPath:@"intValue"] valueForKeyPath:@"@max.self"]);

第一次调用valueForKeyPath:@"intValue"会给出NSNumber个数组。此时,@max.self键路径给出了期望值,因为元素之间进行了数值比较。

答案 1 :(得分:-2)

NSArray *vals = @[@100,@100,@50,@50,@50];

NSLog(@"%d",[[vals valueForKeyPath: @"@max.self"] intValue]