根据对象的属性获取NSMutableArray索引?

时间:2012-03-27 15:10:08

标签: objective-c nsmutablearray

我目前正试图获取NSMutableArray的索引,具体取决于其对象的某个属性。

我有一个xml结构,例如:

<timeperiod>
    <Day>
        <Date>20120325</Date>
    </Day>
    <Day>
        <Date>20120326</Date>
    </Day>
</timeperiod>

现在,假设xml结构包含一个月中的每一天。

日期及其所有属性都已添加到NSMutableArray

我想要的是:根据日期获取数组的索引。

我在伪代码中想象这样的东西:

-(NSInteger)getIndexFromObjectProperty:(NSString *)property{

   // Givf index from array where date is for example 20120310

   //pseudo
   Return [myClassObject.ObjectArray indexFromProperty:property];


}

我发现了这个:Sorting NSMutableArray By Object's Property

这是从属性中排序,但是如何从属性0_0

获取索引

我也发现了这个:Function to get index from an array of objects having certain value of provided property 如果语法开箱即用,这将有所帮助:(

任何提示和/或指示都将受到高度赞赏。

提前致谢。

编辑我正在尝试给出答案。将获得更新。

EDIT2:办公室因为他们把建筑物锁定而把我扔了出去......明天我会回复你的。

5 个答案:

答案 0 :(得分:6)

这真的没有我想象的那么难......

通过执行以下操作解决...

-(NSInteger)returnIndexFromDateProperty:(NSString *)property{


    NSInteger iIndex;

    for (int i = 0; i < [myArray count]; i++){

        if([property isEqualToString:[[myArray objectAtIndex:i]dateProperty]]){

            iIndex = i;
        }
    }    


    return iIndex;

}

感谢所有其他答案。他们在思考过程中(不是坏事)纠正了很多。

答案 1 :(得分:5)

您可以使用indexOfObjectPassingTest:方法使用测试每个对象,并返回BOOL

-(NSInteger)getIndexFromObjectProperty:(NSString *)property{
    return [myArray indexOfObjectPassingTest:
        ^(id obj, NSUInteger idx, BOOL *stop) {
            // Return true if obj has the date that you are looking for.
            BOOL res;
            if ([property isEqualTo:[obj dateProperty]]) {
                res = YES;
                *stop = YES;
            } else {
                res = NO;
            }
            return res;
        }];
 }

答案 2 :(得分:1)

您可以使用

 - (NSUInteger)indexOfObjectPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate

我不确定你的日期格式是怎样的,但据我所知它是一个NSString,所以我会这样做:

-(NSInteger)indexFromDate:(NSString *)date{

   return [myClassObject.ObjectArray indexOfObjectPassingTest:
             ^(id obj, NSUInteger idx, BOOL *stop) {
                return ([obj isEqualToString:myIdentifier]);
             }];
}

答案 3 :(得分:1)

您可以使用NSPredicate

执行此操作
[array indexOfObject:[[array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.date == %@",date]] objectAtIndex:0]]

答案 4 :(得分:0)

从您的帖子中不清楚您的数组在将XML数据放入其中后将具有什么结构。它会是一个数组数组吗?一系列词典?通常,要从数组中获取对象,请使用indexOfObject:或其中一个变体。