三个整数的最大值(最高值)和最小值(最低值)

时间:2010-12-10 19:49:11

标签: iphone objective-c ios

我有三个整数

int myI1 = 33;
int myI2 = 44;
int myI3 = 22;

我想确定什么是最高值,哪个是使用Objective-C

的最低值

我不确定要走哪条路...... NSArray,int数组或其他东西。我知道我可以继续比较价值观,但我正在寻找更优雅和/或更通用的方法。

谢谢!

3 个答案:

答案 0 :(得分:26)

将这些数字存储在数组中是很好的。简单的C数组就足够了,在Objective-C中性能最佳。要找到最低限度,您可以使用此功能。类似于最大值。

int find_min(int numbers[], int N){
    int min = numbers[0];
    for(int i=1;i<N;i++)
        if(min>numbers[i])min=numbers[i];

    return min;
}

如果只有三个数字,您可以手动进行比较以获得最佳性能。在Foundation / NSObjCRuntime.h中的Cocoa中有一个MIN()和MAX()宏。最大限度,只需:

int m = MAX(myI1, MAX(myI2, myI3));

这可以缩放到更多数字,并且可能比使用循环的第一种方法更快。

答案 1 :(得分:0)

不幸的是,在Cocoa中没有一种简洁优雅的方式。

Plain C Array +自定义循环将是最好的。使用NSArray,您必须将整数包装在NSNumbers中,而不会从中获得任何好处。

答案 2 :(得分:0)

Objective-C内置的MAX(a,b)MIN(a,b)宏仅适用于两个值。

我创建了两个宏,用于使用2个或多个值,分别称为multi-max和multi-min(MMAX和MMIN)

这是他们的定义,只需将粘贴复制到您的.h

#define MMAX(...) ([@[__VA_ARGS__] valueForKeyPath:@"@max.self"])
#define MMIN(...) ([@[__VA_ARGS__] valueForKeyPath:@"@min.self"])

示例用法:

x = MMAX(2,3,9,5);
//sets x to 9.