从以下数组我想用message_id = 1获取字典。基本上我想得到message_id == 1的单元格的索引路径。
<__NSArrayM 0x17d918d0>(
<__NSArrayM 0x17faa070>(
{
chatStatus = sent;
date = "Feb 05, 2016";
from = "";
height = "17.000000";
isOutgoing = yes;
"message_id" = "1";
time = "02:39 PM";
to = "";
width = "95.000000";
},
{
chatStatus = sent;
date = "Feb 05, 2016";
from = "";
height = "17.000000";
isOutgoing = yes;
"message_id" = "2";
time = "02:39 PM";
to = "";
width = "95.000000";
},
)
)
答案 0 :(得分:0)
我认为你应该看看NSArray的方法
-[NSArray indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop)]
做类似的事情:
NSMutableArray *indexPaths = [NSMutableArray array];
[myArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger firstIndex, BOOL * _Nonnull stop) {
NSArray *messages = (NSArray*)obj;
NSIndexSet *indexes = [messages indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSDictionary *message = (NSDictionary*)obj;
if (message.message_id == 1) {
return YES;
}
return NO;
}];
[indexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) {
[indexPaths addObject:[NSIndexPath indexPathForRow:idx inSection:firstIndex]];
}];
})];
这看起来有点棘手,而且我很快就做到了,所以我认为你可以改进它。我们的想法是枚举您的第一个数组,然后使用“indexesOfObjectsPassingTest”来获取匹配对象的所有索引。然后通过遍历NSIndexSet对象的枚举来和你的indexPaths:)
我认为你甚至可以递归地执行它,这样你就不会受到数组深度的限制,这里只有2:/
希望它有所帮助\ o Bilkix。