Objective-C-获取具有最大属性值的对象
我有一个Car类。它有一个名为enginePower的属性。另一方面,我有一个包含超过50个汽车物体的NSArray。我将如何选择具有最高enginePower的汽车,同时它还低于给定值。当我问的车是低于320就应该给我的525i宝马最高enginePowerObjective-C-获取具有最大属性值的对象
BMW X5-345 hp
Audi A3-200 hp
BMW 525i -225 hp
VW Passat CC-175 hp
.....
现在,从这个数组汽车:更清晰。是否有可能实现。我的意思是说有一个很好很简单的方法,还是需要很多代码?
由@Jasarien提供的答案会工作得很好,但如果你想避免代码写来遍历你可以尝试这样的:
- (Car *)getHighestPowerFromCars:(NSArray *)carArray atLeast:(NSNumber *)minPower {
NSArray *descriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"enginePower" ascending:NO]];
NSArray *sortedArray = [carArray sortedArrayUsingDescriptors:descriptors];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"enginePower >= %@", minPower];
NSArray *filteredArray = [sortedArray filteredArrayUsingPredicate:predicate];
return [filteredArray objectAtIndex:0];
}
更好的解决方案:P – Jasarien 2012-02-28 07:53:44
使用引擎功率属性对数组进行排序,然后遍历数组,直到找到大于指定值的enginePower
值。然后取currentArrayIndex - 1
中的对象的值。
您可以通过在NSArray
(这将返回一个新的,排序,自动释放阵列)上NSMutableArray
或-sortedArrayUsingSelector:
使用-compareUsingSelector:
做到这一点。
您可以在您的Car
类中创建一个名为类似-compareUsingEnginePower:
的类,该类将以另一个Car
对象作为参数。
然后您可以比较两个enginePower
属性并返回NSOrderedSame
,NSOrderedAscending
或NSOrderedDescending
之一。
直白迭代通过数组,仅在汽车寻找下面的功率限制,并挑选具有最高功率:
— (Car *)getHighestPowerFromCars:(NSArray *)carArray lessThan:(NSNumber *)maxPower
{
NSNumber* highest = nil;
Car* highestCar = nil;
for (Car* car in carArray)
{
NSNumber* power = car.enginePower;
if ([power compare:maxPower] == NSOrderedAscending])
{
if (highest == nil || [power compare:highest] == NSOrderedDescending])
{
highest = power;
highestCar = car;
}
}
}
return highestCar;
}
但没有任何理由真的为什么enginePower应该是一个NSNumber,而不是例如双。假设电力从不为负:
— (Car *)getHighestPowerFromCars:(NSArray *)carArray lessThan:(double)maxPower
{
double highestPower = -1.0;
Car* highestCar = nil;
for (Car* car in carArray)
{
double power = car.enginePower;
if (power < maxPower && power > highestPower))
{
highestPower = power;
highestCar = car;
}
}
return highestCar;
}
但随后排序和谓词SOOOO快...
我会使用提供的工具«直接»调用,而不是微观和过早的优化。 – vikingosegundo 2014-03-05 22:39:16
看['NSPredicate'](https://developer.apple.com/library/mac /搜索/ q = nspredicate)。 – 2012-02-27 19:55:17