Objective c valueForKeyPath:@"@“最大自我”;数字为100时不工作

Objective c valueForKeyPath:@"@“最大自我”;数字为100时不工作,objective-c,nsarray,max,Objective C,Nsarray,Max,返回 最大值:50 您可能有一个字符串数组。当与字符串比较时,“50”大于“100”,因为5在1之后。您需要先转换为整数,然后取最大值 不幸的是,ObjC没有map功能,因此需要手动执行 NSArray *vals = {100,100,50,50,50} maximumValue = [[vals valueForKeyPath: @"@max.self"] intValue]; 编辑 根据Sulthan的建议,您还可以执行以下操作: NSMutableArray *intArray = [

返回

最大值:50


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

不幸的是,ObjC没有
map
功能,因此需要手动执行

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

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

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

valueForKeyPath:@“intValue”
的第一次调用给出了一个
NSNumber
s的数组。此时,在元素之间进行数字比较时,
@max.self
键路径给出了期望值。

您的代码不是有效的Obj-C。如何将int直接分配给nsarray?。欢迎。请不要将它们作为
NSString
对象进行比较,而应将它们作为
NSNumber
对象进行比较,因为
@“50”
大于
@“100”
,所以您应该像这样尝试,例如
NSArray*vals=@[@100,@100,@50,@50]
[NSArray valueForKey:
可以用作Objective-C中的
映射。此外,如果您的猜测为真,您可以在原始数组上使用
@“@max.intValue”
。这似乎不是真的<代码>NSArray*a=@[@“50”,“100”];NSLog(@“%@,[a valueForKey:@“max.intValue”])不起作用。在
max
之前缺少
@
。True。补充说。仍然崩溃。
[@[@“0”、“1”、“5”、“10”]valueForKeyPath:@“@max.intValue”]
。您需要使用
-valueForKeyPath
NSArray *a = @[ @"50", @"100" ];
NSLog(@"%@", [[a valueForKeyPath:@"intValue"] valueForKeyPath:@"@max.self"]);
NSArray *vals = @[@100,@100,@50,@50,@50];

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