gpt4 book ai didi

ios - 使用 valueForKeyPath 查找 NSMutableArray 的平均值

转载 作者:可可西里 更新时间:2023-11-01 04:09:18 25 4
gpt4 key购买 nike

目前我正在尝试寻找一种紧凑的方法来平均矩阵。显而易见的解决方案是对矩阵求和,然后除以元素数。然而,我在苹果开发者网站上遇到了一种方法,该方法声称可以使用 valueForKeyPath 以更简单的方式完成。这是链接在这里:

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueCoding/Articles/CollectionOperators.html

这是我目前正在努力让它发挥作用的例子:

-(void)arrayAverager
{
NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:25];
[myArray addObject:[NSNumber numberWithInteger:myValue]];
NSNumber *averageValue = [myArray valueForKeyPath:@"@avg.self"];
NSLog(@"avg = %@", averageValue);

}

问题是:它不是对数组进行平均,而是将数组中的元素 1 乘 1 地打印出来。

更新

-(void) pixelAverager

{
//Put x-coordinate value of all wanted pixels into an array
NSMutableArray *xCoordinateArray = [NSMutableArray arrayWithCapacity:25];
[xCoordinateArray addObject:[NSNumber numberWithInteger:xCoordinate]];
NSLog(@"avg = %@", [xCoordinateArray valueForKeyPath:@"@avg.intValue"]);
}

最佳答案

您需要使用 @avg.floatValue(或 @avg.doubleValue,或者您有什么)。 @avg 运算符将对点后名称指定的数组中的对象的属性进行平均。文档在这一点上令人困惑,但这就是:

to get the values specified by the property specified by the key path to the right of the operator

在说。由于您有一组 NSNumber 对象,因此您可以使用其中一个 *value 访问器,例如floatValue 获取每个对象的值。例如:

#include <Foundation/Foundation.h>

int main(void) {
NSMutableArray *ma = [NSMutableArray array];
[ma addObject:[NSNumber numberWithFloat:1.0]];
[ma addObject:[NSNumber numberWithFloat:2.0]];
[ma addObject:[NSNumber numberWithFloat:3.0]];

NSLog(@"avg = %@", [ma valueForKeyPath:@"@avg.floatValue"]);

return 0;
}

编译并运行这段代码返回:

$ clang avg.m -framework Foundation -o avg
steve:~/code/tmp
$ ./avg
2013-01-18 12:33:15.500 avg[32190:707] avg = 2
steve:~/code/tmp

这种方法的好处在于,它适用于任何集合,无论是同类集合还是其他集合,只要所有对象都响应指定的方法,@avg 就会起作用。

编辑

正如评论中指出的那样,OP 的问题是他用一个元素对一个集合进行平均,因此它似乎只是简单地打印集合的内容。对于 NSNumber 对象的集合,@avg.self 工作得很好。

关于ios - 使用 valueForKeyPath 查找 NSMutableArray 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14398756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com