Ios 从[NSArray valueForKeyPath:@";@max.value";]获取数据模型,而不仅仅是值
以下是我的数据模型:Ios 从[NSArray valueForKeyPath:@";@max.value";]获取数据模型,而不仅仅是值,ios,objective-c,nsarray,Ios,Objective C,Nsarray,以下是我的数据模型: @interface DataModel : NSObject @property (strong, nonatomic) NSString *label; @property (nonatomic) float value; @property (nonatomic) NSInteger index; @property (nonatomic, strong) NSString *unit; @end 我有一个数据模型的NSArray NSArray *myDataMo
@interface DataModel : NSObject
@property (strong, nonatomic) NSString *label;
@property (nonatomic) float value;
@property (nonatomic) NSInteger index;
@property (nonatomic, strong) NSString *unit;
@end
我有一个数据模型的NSArray
NSArray *myDataModels;
现在我需要从这个数组中获取一个具有最高@属性(非原子)浮点值的数据模型代码>
我可以通过使用
[[myDataModels valueForKeyPath:@"@max.value"] intValue]
但我需要的是具有最高值的整个DataModel
,而不仅仅是值
有人能帮我吗?您需要迭代数组并找到最大值
DataModel *maxModel = nil;
float maxValue = FLT_MIN;
for (DataModel *model in myDataModels) {
if (model.value > maxValue) {
maxModel = model;
maxValue = model.value;
}
}
NSLog(@"The max model is %@", maxModel);
使用谓词的最小版本可以是
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.value ==%@.@max.value", myDataModels];
NSArray *filteredArray = [myDataModels filteredArrayUsingPredicate:predicate];
if(filteredArray.count>0)
DataModel *smallestValue = [filteredArray objectAtIndex:0];
或者你也可以这样做(正如@Puneet在评论中建议的那样)
是的,使用迭代器绝对可以解决所有问题,但我的意思是只使用[NSArray valueForKeyPath:@“@max.value”]
或类似的方法,但就这么简单。我不相信您可以使用KVC来获取对整个对象的引用。但我不是100%确定。一旦获得最大值,就可以使用NSPredicate获取与该最大值相关的数据模型。是否使用Predicate进行第二次搜索?因为我认为valueForKeyPath
已经搜索了一次,如果我需要搜索两次才能从数组中获取元素,我宁愿使用迭代器。不过还是要谢谢你的帮助。事实上,你不能说哪种方法最好,因为它取决于很多因素。例如,数组中有多少数据?如果能够确认数据大小,则可以执行简单的负载测试。你可以随时比较和选择。更多关于NSPredicate的信息,它说它是一种查询语言,所以可能不会循环两次,但仍然不能确定。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.value == %@",[myDataModels valueForKeyPath:@"@max.value"]];
NSArray *filteredArray = [myDataModels filteredArrayUsingPredicate:predicate];
if(filteredArray.count>0)
DataModel *smallestValue = [filteredArray objectAtIndex:0];