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

valueForKeyPath: @"@max.self" not work when number is 100

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

Returns

maximumValue : 50

您可能有一个字符串数组。作为字符串比较,“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 key-path 给出了预期值,因为元素之间进行了数值比较。

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

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