【问题标题】:Can valueForKeyPath compute the maximum of sums?valueForKeyPath 可以计算总和的最大值吗?
【发布时间】:2014-07-15 12:46:47
【问题描述】:

我有以下 Objective-C 类:

@interface GraphDataPoint : NSObject
@property NSDate *date;
@property NSNumber *value;
@end

给定NSArrayGraphDataPoint,我知道如何使用value 计算最大值

[data valueForKeyPath:@"@max.value"]

现在我想将value 更改为values 的数组:

@property NSArray *values;

是否有类似的方法可以使用valueForKeyPath 计算NSArray 中每个GraphDataPointvalue 属性的sum 的最大值? (我知道我可以编写一个嵌套循环来手动解决它。)

【问题讨论】:

    标签: ios objective-c kvc


    【解决方案1】:

    你应该可以这样做:

    NSArray *a = @[
        [[GraphDataPoint alloc] initWithVal:@[@1, @2, @3]] // Sum=6
    ,   [[GraphDataPoint alloc] initWithVal:@[@4, @1, @1]] // Sum=6
    ,   [[GraphDataPoint alloc] initWithVal:@[@5, @4, @7]] // Sum=16
    ,   [[GraphDataPoint alloc] initWithVal:@[@6, @8, @9]] // Sum=23 <<== Max
    ,   [[GraphDataPoint alloc] initWithVal:@[@7, @6, @2]] // Sum=15
    ];
    
    NSNumber *res = [a valueForKeyPath:@"@max.value.@sum.intValue"];
    NSLog(@"Res: %@", res); // This prints 23
    

    【讨论】:

    • 恐怕不行,我得到一个类似的错误:reason: '[&lt;GraphDataPoint 0x8c79350&gt; valueForUndefinedKey:]: this class is not key value coding-compliant for the key @sum.'。我仍然需要使用GraphDataPoint 类。
    • @GregHewgill 我修复了它 - 它在我的设置中工作(我添加了 initWithVal: 初始化程序,它采用 NSArray*NSNumber* 对象)。
    • 你打败了我! - 请注意,如果您使用 @"@max.values.@sum.self" 作为键路径,则它适用于任意数字,而不仅仅是整数。
    • 就是这样,谢谢!我的值实际上是double,所以@max.values.@sum.self 效果很好。
    猜你喜欢
    • 2019-09-28
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多