简体   繁体   English

如何解析Objective-C中的对象数组?

[英]How do I parse through an array of objects in Objective-C?

Coming from C++, here's my question : 来自C ++,这是我的问题:

I have created objects of this type : 我创建了这种类型的对象:

    Size *one = [[Size alloc] initWithX: 3 andY: 1];
    Size *two = [[Size alloc] initWithX: 4 andY: 7];
    // etc...
    Size *thirtythree = [[Size alloc] initWithX: 5 andY: 9];

( with a @property int x; & @property int y; for each object.. ) (使用@property int x;@property int y;对于每个对象..)

that I have stored in an array as follows : 我已经存储在数组中,如下所示:

NSArray *arrayOfSizes;

arrayOfSizes = [NSArray arrayWithObjects:one,two,three,four,five,six,
                seven,eight,nine,ten,eleven,twelve,thirteen,
                fourteen,fifteen,sixteen,seventeen,eighteen,
                nineteen,twenty,twentyone,twentytwo,
                twentythree,twentyfour,twentyfive,twentysix,
                twentyseven,twentyeight,twentynine,thirty,
                thirtyone,thirtytwo,thirtythree nil];

now I have a single object of type : 现在我有一个类型的单个对象:

Myobject *myObject = [[Myobject alloc] initWithX: 5 andY: 3];

that also has a @property int x; 也有@property int x; & @property int y; @property int y; ... ...

and I want to compare its values to the values of the objects found in the array, until I find an array object of similar values.. But I don't know how to do that in Obj-C. 我想将它的值与数组中找到的对象的值进行比较,直到我找到一个具有相似值的数组对象。但我不知道如何在Obj-C中这样做。 (in c++ I would simply use a vector v; with v.size(); and v[x]; ..etc... I suppose..) (在c ++中,我只是使用vector v;使用v.size();以及v[x]; .. v.size(); ...我想..)

here's what I'm looking for.. :) 这就是我要找的东西.. :)

while( !wholeOfArrayOfSizesChecked && !found)
{
    if ( // x & y of object in array is equal to x & y of myObject )
    {
        found = YES;
    }
    else if( // whole of array checked)
    {
       wholeOfArrayOfSizesChecked = YES;
    }
    else
    { 
      //move on to the next object of the array..
    }
}

Thanks in advance for any help! 在此先感谢您的帮助!

Well, you could just use fast enumeration on the array. 好吧,你可以在数组上使用快速枚举 Something like this: 像这样的东西:

Myobject *myObject = [[Myobject alloc] initWithX: 5 andY: 3];

for (Size *s in arrayOfSizes)
{
    if (s.x == myObject.x && s.y == myObject.y)
    {
        // Found one
        // Do something useful...
        break;
    }
}

Another one: 另一个:

NSUInteger index = [arrayOfSizes indexOfObjectPassingTest:
    ^BOOL(Size *s, NSUInteger idx, BOOL *stop)
    {
        return (s.x == myObject.x) && (s.y == myObject.y);
    }
];

if (index != NSNotFound) {
    id object = [arrayOfSizes objectAtIndex:index];
}

How'bout a for-in loop? 怎么一个for-in循环?

for (Size *item in array) {
   // compare 'item' to myObject
   if (/* equal condition here */) break;
}

Try something like this: 尝试这样的事情:

for (int i = 0; i < [arrayOfSizes size]; i++)
{
  Size *current = (Size *)[arrayOfSizes objectAtIndex:i];
  if (myObject.x == current.x && myObject.y == current.y)
  {
    // found
    break;
  }
}
-(BOOL) isSize:(Size*)size equalToMyObject:(MyObject*)object{
    return (size.x == object.x) && (size.y == object.y);
}

//In some method where you are checking it:
for (Size* size in arrayOfSizes){
        if ([self isSize:size equalToMyObject:myObject]){
            //You found it! They're equal!
            break;
        }
}

Just to use your given structure. 只是为了使用你给定的结构。 There are smarter ways of doing it though :) 有更聪明的方法,但:)

wholeOfArrayOfSizesChecked = NO; 
int currObj = 0  
while( !wholeOfArrayOfSizesChecked && !found)
{
    Size *current = (Size *)[arrayOfSizes objectAtIndex:i];
    if (myObject.x == current.x && myObject.y == current.y)
    {
        found = YES;
    }
    else if(currObj == [arrayOfSizes count] -1 )
    {
       wholeOfArrayOfSizesChecked = YES;
    }
    else
    { 
      currObj++;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM