Ton*_*ite 5 average objective-c nsmutablearray ios
目前我正试图找到一种平均矩阵的简洁方法.显而易见的解决方案是对矩阵求和,然后除以元素的数量.但是,我在苹果开发者网站上遇到了一种方法,声称可以使用valueForKeyPath以更简单的方式完成此操作.这与以下内容相关联:
以下是我正在努力尝试使其工作的示例:
-(void)arrayAverager
{
NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:25];
[myArray addObject:[NSNumber numberWithInteger:myValue]];
NSNumber *averageValue = [myArray valueForKeyPath:@"@avg.self"];
NSLog(@"avg = %@", averageValue);
}
Run Code Online (Sandbox Code Playgroud)
的问题是:代替平均它仅通过1打印出阵列1中的元素阵列.
UPDATE
-(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"]);
}
Run Code Online (Sandbox Code Playgroud)
fre*_*ace 18
你需要使用@avg.floatValue(@avg.doubleValue或者你有什么).该@avg运营商将平均点后由name指定数组中的对象的属性.文档在这一点上令人困惑,但这就是:
获取由运算符右侧的键路径指定的属性指定的值
在说.由于您有一组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;
}
Run Code Online (Sandbox Code Playgroud)
编译并运行此代码将返回:
$ 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
Run Code Online (Sandbox Code Playgroud)
关于这种方法的好处是,只要所有对象都响应指定的方法,任何集合,同源或其他的@avg工作都可以工作.
编辑
正如评论中所指出的,OP的问题在于他使用一个元素对集合进行平均,因此它似乎只是打印集合的内容.对于一组NSNumber对象,@avg.self工作得很好.
| 归档时间: |
|
| 查看次数: |
7299 次 |
| 最近记录: |