NSPredicate从数组数组中获取字典

时间:2016-02-05 14:44:18

标签: ios xcode swift nsmutablearray nspredicate

从以下数组我想用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";
},
)

)

1 个答案:

答案 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。