NSPredicate为两个NSNumber数组
我有点难以为我的searchfunction写一个谓词,并认为你会帮忙。 所以基本上我有两个NSNumbers数组。 我想我的谓词满足以下条件:
If a number's integerValue in array A matches any integerValue in array B.
我不想为这个解决scheme使用任何types的循环。 这是我迄今为止
ANY integerValue == ANY //how do I pass the entire array here and ask for the integerValue of each member?
ANY操作符将处理该操作。
由于从你的问题来看,在正常谓词的说法中哪个数组是“自我”是有点困难的,所以我会自己写下来:
NSArray *arrayA = @[@2, @3, @7]; NSArray *arrayB = @[@2, @4, @9]; NSPredicate *pred = [NSPredicate predicateWithFormat: @"ANY %@ IN %@", arrayA, arrayB];
由于缺乏“自我”,必须以nil
作为对象进行评估,但工作得很好:
BOOL matched = [pred evaluateWithObject: nil];
如果你想在谓词中有一个“自我”,你可以直接input:
NSPredicate *pred = [NSPredicate predicateWithFormat: @"ANY self IN %@", arrayB]; BOOL matched = [pred evaluateWithObject: arrayA];
结果是一样的。
一个小概念评论
如果在两个数组中都包含任何整数,则上面的谓词的计算结果为true,这就是我如何读取您的问题。
这就是说,从概念上讲,你似乎在testing两组数字是否相互交叉。 NSSet
的方法intersectsSet:
检查,所以另一种做testing的方法是保持你的数字为集合并testing相交:
matched = [setA intersectsSet: setB];
我知道这不是你要求的(谓词和所有),但另一种方法是使用NSArray
的- (id) firstObjectCommonWithArray:(NSArray *)otherArray
,如果没有find任何公共对象,将返回nil
。
BOOL arraysIntersect = [array1 firstObjectCommonWithArray:array2] != nil;
有一点需要注意的是,在比较两个对象的时候会使用自己的对象相等性规则,这意味着如果两个对象是NSNumber实例,它将使用NSNumber
的compare:
方法compare:
。 但是迄今为止提出的基于谓词的解决scheme也是如此。
- 电子邮件使用特殊字符的正则expression式问题
- CS193P:使用Swift Lecture 2 Notes开发iOS应用程序
- objective-c:如何将string分配给NSMutableData?
- 使用比较器对NSDictionaries的NSArray进行sorting
- 如何在iOS-8的Objective-C中使用控制中心上的图像设置音频细节?
- 如何通过编程lockingiPhone
- iOS自动布局:等同的空间,以适应Superviews宽度
- URLWithString和NSURL的fileURLWithPath之间有什么区别?
- 什么是预处理器macros来testing是否正在构build应用程序扩展?