2012-03-27 73 views
1

我目前正在試圖抓住我的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

這真的是並不難,因爲我認爲這將是..

用以下方法解決...

-(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; 

} 

感謝所有其他答案。他們在思考過程中he he不馴(不壞)。

4

您可以使用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; 
     }]; 
} 
0

這不是從您的帖子不清楚是什麼結構的陣列將擁有把XML數據轉換成之後。它會是一個數組的數組?一系列字典?通常,要從數組中獲取對象,請使用indexOfObject:或其變體之一。

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]); 
      }]; 
} 
1

你能做到這一點與NSPredicate

[array indexOfObject:[[array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.date == %@",date]] objectAtIndex:0]]