我目前正试图获取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:办公室因为他们把建筑物锁定而把我扔了出去......明天我会回复你的。
答案 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:或其中一个变体。