标题可能有点不清楚。但这就是我想要实现的目标:
我有NSMutableArray
个自定义对象,例如
[
Custom Object 1,
Custom Object 2,
Custom Object 3,
..
..
..
Custom Object 10
]
Custom object
由以下变量组成:
id, name, date, seen_count;
我的值为id
,例如10
。
现在我希望得到Index
custom object
id=10
NSMutableArray
Row/Cell
,以便我可以更新该对象并重新加载特定的UITableView
{{1}}反映变化。
P.S:一种方法是循环遍历数组。但还有其他方法可以达到这个目的吗?
答案 0 :(得分:2)
使用NSPredicate ::
NSUInteger positionOfChange = [yourArray indexOfObject:object];
// update your cell that is on position positionOfChange integer value
获取array ::
中的Object索引 records = LOAD '/home/user/localinputfiles/pass_fail.txt' USING PigStorage('\t') as (hour:int,result:chararray);
records_grp = GROUP records BY hour;
records_each = FOREACH records_grp
{
passed_bag = FILTER records BY result == 'Pass';
failed_bag = FILTER records BY result == 'Fail' ;
GENERATE group, COUNT(passed_bag) as pass_cnt, COUNT(failed_bag) as fail_cnt ,COUNT(records) as total_cnt;
};
dump records_each;
希望这会对代码段中的任何拼写错误提供帮助和抱歉。
注意:: 如果您没有确认该对象将始终存在于id,而不是首先检查已过滤的数组是否具有对象,然后再进一步,否则它将崩溃。 如果您不确定,请不要在filteredArrayUsingPredicate中检查lastobject。
答案 1 :(得分:2)
由于数组只能通过索引访问,因此迭代数组是唯一的方法。您可以显式循环,查找适当的对象或隐式使用indexOfObjectPassingTest
的{{1}}方法。这种方法的优点是它只需要迭代到第一个匹配,而NSArray
需要迭代整个数组。
filteredArrayUsingPredicate
另一种方法是使用辅助NSDictionary来存储对象的索引。这需要单个迭代数组来构建字典,但允许您更快地定位给定对象。
为方便起见,我假设在这种情况下id是一个字符串;如果它是一个int,那么你需要将其装入NSNumber:
NSInteger objectIndex=[myArray indexOfObjectPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
CustomObject *myObject=(CustomObject *)obj;
if (obj.id==targetid) { // Assumes id is an int, change the test as appropriate if it is a string or other object
*stop=YES;
}
}];
然后,要访问对象,只需使用字典
NSMutableDictionary auxDict=[NSMutableDictionary new];
for (i=0;i<myArray.count;i++) {
CustomObject *obj=myArray[i];
[auxDict addObject:[NSNumber numberWithInt:i] forKey:obj.id];
}