ios - 使用基于谓词键的另一个数组的谓词过滤数组

标签 ios iphone arrays xcode nsmutablearray

大家好,这可能是个愚蠢的问题,之前可能有人问过,我想使用谓词过滤数组。我有一个数组,其中包含如下相同类型的字典。

<NSArrayM>(
ID:54d3ca82535c12243400c254                      
Room JID:(null)                      
name:(null)                      
photo:(null)                      
type:3                      
lastMessage:Gand                      
lastMessageDate:2015-02-05 20:02:47 +0000                      
occupantIDs:(
2285222,
2285224
)                      
userID:2285224                      
unreadMessagesCount:4                      
lastMessageUserID:2285224
)

我想通过作为数组的键 occupantsIDs 来过滤数组。 我想创建匹配 occupantIDs 作为键的谓词。我想知道我可以使用它来过滤数组。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"occupantIDs = @[2285222,2285224]"];        
NSArray *filterArray = [dialogs filteredArrayUsingPredicate:predicate];

任何答案都将不胜感激。

最佳答案

如果您使用:

NSPredicate *filter = [NSPredicate predicateWithFormat:@"SUBQUERY(occupantIDs, $x, $x == %@).@count > 0 AND SUBQUERY(occupantIDs, $x, $x == %@).@count > 0", @2285222,@2285224];

这将匹配 occupantIDs 数组包含 2285222 和 2285224(并且可能还包含其他 occupantID)的任何项目。

如果您想排除那些也有其他 occupantID 的项目,请使用以下内容:

NSPredicate *filter = [NSPredicate predicateWithFormat:@"SUBQUERY(occupantIDs, $x, $x == %@).@count > 0 AND SUBQUERY(occupantIDs, $x, $x == %@).@count > 0 AND SUBQUERY(occupantIDs, $x, $x != %@ AND $x != %@).@count = 0", @2285222,@2285224,@2285222,@2285224];

为了解释这些是如何工作的:首先,每个 %@ 都被参数列表中的相应项目替换(@2285222 等)。所以第一个 SUBQUERY 变成“SUBQUERY(occupantIDs, $x, $x == 2285222)”。这相当于“通过测试每个元素‘$x’是否等于 2285222 来过滤数组‘occupantIDs’”。 (请注意,'$x' 是该元素的任意名称 - 它可以是 '$y' 或您喜欢的任何名称。)“.@count > 0” 然后检查这个过滤后的数组是否有任何项目。换句话说,至少有一个 occupantID 匹配 2285222。

第二个 SUBQUERY 基本相同,但针对的是 2285224。因此您可以将整个谓词解释为“包括 occupantIDs 数组中包含与 2285222 匹配的任何元素以及与 2285224 匹配的任何元素的那些项目”。

为了排除也有其他 occupantID 的项目,我添加了另一个子句,该子句使用相同的技术仅包括 occupantIDs 数组中没有与 2285222 或 2285224 不匹配的项目的项目。

关于ios - 使用基于谓词键的另一个数组的谓词过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370964/

相关文章:

c++ - 追加到 std::array

java - 如何修复计算二进制数幂但经常失败的方法?

ios - 在 iOS 模拟器中安装 crashlytics build

ios - 在 iOS Swift 中将 NSDate 转换为字符串

iphone - 在 iPhone 中显示从 ALAsset 检索到的 URL 中的图像

iphone - 如何高效搜索iOS通讯录

javascript - 将循环数组分配给对象

ios - 为什么我的 UIButton 在更新上面的 ImageView 后不可点击?

iphone - 在我的屏幕上安装 iPhone 5 模拟器?

iphone - iPhone 上的自定义相机工具栏