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]
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]