繁体   English   中英

如何使子对象搜索更简洁?

[英]How can I make sub-object searching more terse?

我对一种简洁的方法感兴趣,可以在需要子对象级别的数组中查找匹配项。 性能不必接近理想,但应该合理。

对于这种情况, 我不想添加反向关系或管理保留的字典 我根本不想更改模型。

Object1包含一个Object2,而Object2包含一个Object3。 我知道以下方法将返回第一个匹配项,但是返回每个匹配项的解决方案也是可以接受的。

-(Object1*)getObject1ForObject3:(Object3*)object3
{
    for(Object1 *object1 in self.object1s)
        if(object1.object2.object3 == object3)
            return  object1 ;

    return nil ;
}

为了声望,如果中间有一对多的关系,我们可以使它简洁吗?

-(Object1*)getObject1ForObject3:(Object3*)object3
{
    for(Object1 *object1 in self.object1s)
        for(Object2 *object2 in object1.object2s)
            if(object2.object3 == object3)
                return  object1 ;

    return nil ;
}

嗯,用于声明NSPredicate的API并不十分简洁 ,但它可能比您正在做的还要简洁。

对于第一种情况,中间没有一对多:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"object2.object3 == %@", object3];
NSArray *matchingObj1s = [self.object1s filteredArrayUsingPredicate];

当中间存在一对多关系时:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY object2s.object3 == %@", object3];
NSArray *matchingObj1s = [self.object1s filteredArrayUsingPredicate];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM