- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
目前我正在尝试寻找一种紧凑的方法来平均矩阵。显而易见的解决方案是对矩阵求和,然后除以元素数。然而,我在苹果开发者网站上遇到了一种方法,该方法声称可以使用 valueForKeyPath 以更简单的方式完成。这是链接在这里:
这是我目前正在努力让它发挥作用的例子:
-(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/
我在互联网上找到了一些 Mapkit 代码,如下所示: - (void)recenterMap { NSArray *coordinates = [self.mapView valueForKeyPa
动物类定义: @property (nonatomic, strong) NSString *food; 猫类定义: @property (nonatomic, copy) NSString *nam
我有以下 Objective-C 类: @interface GraphDataPoint : NSObject @property NSDate *date; @property NSNumber
我正在解析这个 json: { "destination_addresses" : [ "Göteborg, Sverige" ], "origin_addresses" : [ "Stockholm
我是另一个初学者,试图了解 Cocoa 及其复杂性。我正在读德沃的《Objective-C》。在键值编码部分中有一些 setValue:forKeyPath: 的示例。不知何故,尽我所能,我无法让它工
最近我在一个项目中更改了一些核心数据模型。迁移进行得很顺利,但我在对键路径进行查找的对象上有一些包装器(即:valueForKeyPath:@"@sum.somePropertyThatNoLonge
在数组操作下the Realm NSPredicate cheatsheet它表明我们可以通过 NSPredicate 进行针对 List 中特定元素的查询。但是,当我尝试以下操作时,总是出现“不支持
Printing description of self->data: { root = { participant = (
我有功能 func findObjectInArray(array: [AnyObject], field: String?, fieldValue: AnyObject, startFromTheB
我在 objective c 中的旧函数是 + (NSUInteger)getNumberOfDistinctUsers:(NSArray *)users { NSArray* usersAfterP
我正在寻找其他堆栈溢出问题,但似乎它不适用于我的情况。 我正在制作 YouTube 应用,我的代码如下。 if let JSON = response.result.value as? NS
我正在解析如下所示的 JSON: {"data":{"items":{"daily":{"2013-07-31":16}}}} 我已经构建了一个日期字符串。例如: NSDateFormatter *f
我在使用 valueForKeyPath 时遇到问题,这里是我获取 dataVersion 值的方式,它运行良好: Alamofire.request(.GET, "https://www.amaz
这是一个相当简短的问题,但我对如何解决它有点困惑。 for item in filteredAndSortedDates { print(item.datesSectionHeader())
有什么方法可以使用 valueForKeyPath 访问 NSArray 元素?例如,谷歌的反向地理编码服务返回一个非常复杂的数据结构。如果我想获取城市,现在我必须将其分成两个调用,如下所示: NSD
我有一个核心数据项目,其中包含一种“主”实体,该实体保存年份值(int 16)和一些其他值。还有一些其他“子”实体与该主机具有多对一的关系。在其他实体之一中,我想设置几个默认值,即开始日期和结束日期。
目前我正在尝试寻找一种紧凑的方法来平均矩阵。显而易见的解决方案是对矩阵求和,然后除以元素数。然而,我在苹果开发者网站上遇到了一种方法,该方法声称可以使用 valueForKeyPath 以更简单的方式
我有一个 id 类型的对象,想知道它是否包含给定 keyPath 的值: [myObject valueForKeyPath:myKeyPath]; 现在,我将它包装到一个 @try{ } @catc
我花了几个小时来调试这个问题,因此发布这个,以防你有专家建议/线索。 这是问题所在的代码: NSString *filePath = [[NSBundle mainBundle] pathForRes
我将时间段存储在核心数据中。每个时间段都有一个DateTime名为 EndDate 的属性。我正在尝试获取最大结束日期,该日期在指定日期 ( < ) 之前。 这就是我使用子查询和 ValueForKe
我是一名优秀的程序员,十分优秀!