将int与int的Obj-C数组进行比较

时间:2010-04-12 07:50:49

标签: iphone-sdk-3.0 nsarray nsinteger

如何查看我的整数是否在整数数组中...

例如,我想知道7是否在[1 3 4 5 6 7 8]

的数组中

任何想法?

谢谢

3 个答案:

答案 0 :(得分:6)

有几种方法可以做到这一点取决于诸如阵列大小等因素 - 您需要搜索的频率,需要添加到阵列的频率等等。通常这是一个计算机科学问题。

更具体地说,我猜有三种选择可能最符合您的需求。

  1. “暴力”:只需遍历数组寻找值。在containsObject:上拨打NSArray即可为您执行此操作。对于小阵列尺寸来说简单且可能最快。
  2. 将数组复制到set并使用containsObject:检查是否存在
  3. 保留数组中的值,但对数组进行排序并实现自己的binary search - 这可能不像听起来那么复杂。

答案 1 :(得分:3)

这取决于你拥有的数组类型,如果它是一个对象或一个C数组。根据你的标签判断你有NSIntegers的NSArray,这是错误的。 NSIntegers不是对象,不能放入NSArray,除非将它们包装到一个对象中,例如NSNumber。

的NSArray

使用containsObject:方法。

我不完全确定你如何将整数放入NSArray中。通常的方法是使用NSNumber。

NSArray *theArray = [NSArray arrayWithObjects:[NSNumber numberWithInteger:1],
                                              [NSNumber numberWithInteger:7],
                                              [NSNumber numberWithInteger:3],
                                              nil];
NSNumber *theNumber = [NSNumber numberWithInteger:12];
/*
 * if you've got the plain NSInteger you can wrap it
 * into an object like this:
 * NSInteger theInt = 12;
 * NSNumber *theNumber = [NSNumber numberWithInteger:theInt];
 */
if ([theArray containsObject:theNumber]) {
    // do something
}

C-阵列

我怀疑你正在使用C-Array。在这种情况下,你必须编写自己的循环。

NSInteger theArray[3] = {1,7,3}
NSInteger theNumber = 12;
for (int i; i < 3; i++) {
    if (theArray[i] == theNumber) {
        // do something
        break; // don't do it twice
               // if the number is twice in it
    }
}

答案 2 :(得分:0)

//assume these data, either from a method call or instance variables
int theArray[7] = {1,7,3,8,5,7,4};
int numberIWant = 8;

//this is the essence in a C-array, which you can easily use on ios
BOOL isNumberFound = NO;
for (int i; i < sizeof(theArray)/sizeof(int); i++) {
    if (theArray[i] == numberIWant) {
        isNumberFound = YES;
        break; //breaks the for loop               
    }
}
//return the bool, or otherwise check the bool

if (isNumberFound)
{
//do stuff
}