从[NSArray valueForKeyPath:@"@ max.value"]获取dataModel而不仅仅是值

Sco*_*Zhu 2 objective-c nsarray ios

这是我的数据模型:

@interface DataModel : NSObject
@property (strong, nonatomic) NSString *label;
@property (nonatomic) float value;
@property (nonatomic) NSInteger index;
@property (nonatomic, strong) NSString *unit;
@end
Run Code Online (Sandbox Code Playgroud)

我有一个NSArray与这个数据模型

NSArray *myDataModels;
Run Code Online (Sandbox Code Playgroud)

现在我需要从这个数组中获取最高的数据模型 @property (nonatomic) float value;

我可以通过使用获得最高价值

[[myDataModels valueForKeyPath:@"@max.value"] intValue]
Run Code Online (Sandbox Code Playgroud)

但我需要的是DataModel具有最高价值的整体,而不仅仅是价值.

有人可以帮帮我吗?

rma*_*ddy 6

您需要迭代数组并找到最大值.

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);
Run Code Online (Sandbox Code Playgroud)


Jan*_*mal 5

使用Predicate的最小版本可以

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.value ==%@.@max.value", myDataModels];
NSArray *filteredArray = [myDataModels filteredArrayUsingPredicate:predicate];
if(filteredArray.count>0)
    DataModel *smallestValue = [filteredArray objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

或者你也可以这样做(正如@Puneet在评论中所建议的那样),

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.value == %@",[myDataModels valueForKeyPath:@"@max.value"]];
NSArray *filteredArray = [myDataModels filteredArrayUsingPredicate:predicate];
if(filteredArray.count>0)
    DataModel *smallestValue = [filteredArray objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)