使用谓词过滤NSDictionary

Nas*_*sif 15 iphone objective-c nsdictionary nspredicate

我正在使用一个NSDictionary本身包含字典的一些键及其值.格式如下,

{

"1" = {
        "key1" = "ss",
          "key2" = "rr",
          "name" = "nm"
     },
"2" = {
           "key1" = "tt",
          "key2" = "vv",
           "name" = "gf"
     },
"3" = {
           "key1" = "nm",
          "key2" = "vv",
           "name" = "gf"
     },
"4" = {
           "key1" = "tt",
          "key2" = "vv",
          "name" = "gf"
     },
}
Run Code Online (Sandbox Code Playgroud)

我需要使用NSPredicate来过滤key1应为"tt"且key2应为"vv"的情况.

Sim*_*.IC 25

假使,假设

mainDict = {

"1" = {
        "key1" = "ss",
          "key2" = "rr",
          "name" = "nm"
     },
"2" = {
           "key1" = "tt",
          "key2" = "vv",
           "name" = "gf"
     },
"3" = {
           "key1" = "nm",
          "key2" = "vv",
           "name" = "gf"
     },
"4" = {
           "key1" = "tt",
          "key2" = "vv",
          "name" = "gf"
     },
}
Run Code Online (Sandbox Code Playgroud)

现在您可以通过以下方式过滤:

NSArray *resultArray = [[mainDict allValues] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key1 == %@) AND (key2==%@)", @"tt",@"vv"]];
Run Code Online (Sandbox Code Playgroud)

试试这个来检查:

NSMutableDictionary *mainDict=[[NSMutableDictionary alloc] init];
for(int i=1; i<=3; i++)
{
    [mainDict setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"tt",@"key1",@"vv",@"key2",@"ttqwdwd",@"name", nil] forKey:[NSString stringWithFormat:@"%i",i]];
}
[mainDict setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"tt",@"key1",@"kk",@"key2",@"ttwwdwd",@"name", nil] forKey:[NSString stringWithFormat:@"%i",4]];
[mainDict setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"tt",@"key1",@"kk",@"key2",@"ttwwdwd",@"name", nil] forKey:[NSString stringWithFormat:@"%i",5]];
NSArray *resultArray = [[mainDict allValues] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key1 == %@) AND (key2==%@)", @"tt",@"vv"]];
NSLog(@"%@",resultArray);
Run Code Online (Sandbox Code Playgroud)


Bal*_*alu 6

这有效.您可以在此处设置自己的值.

NSArray *data = [NSArray arrayWithObjects:[NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"ss",@"how", nil] forKeys:[NSArray arrayWithObjects:@"key1",@"key1", nil]],[NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"tt",@"vv", nil] forKeys:[NSArray arrayWithObjects:@"key1",@"key2", nil]],[NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"vv",@"tt", nil] forKeys:[NSArray arrayWithObjects:@"key1",@"key2", nil]],nil];    
NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key1 == %@) AND (key2==%@)", @"tt",@"vv"]];
NSLog(@"%@",filtered);
Run Code Online (Sandbox Code Playgroud)

输出:

(
    {
        key1 = tt;
        key2 = vv;
    }
)
Run Code Online (Sandbox Code Playgroud)

为了更清楚的解释:

NSMutableDictionary *dict4=[[NSMutableDictionary alloc]init];
[dict4 setObject:@"ss" forKey:@"key1"];
[dict4 setObject:@"how" forKey:@"key2"];
NSMutableDictionary *dict5=[[NSMutableDictionary alloc]init];
[dict5 setObject:@"tt" forKey:@"key1"];
[dict5 setObject:@"vv" forKey:@"key2"];
NSMutableDictionary *dict6=[[NSMutableDictionary alloc]init];
[dict6 setObject:@"vv" forKey:@"key1"];
[dict6 setObject:@"tt" forKey:@"key2"];

NSMutableArray  *data = [[NSMutableArray alloc]init];  
[data addObject:dict4];
[data addObject:dict5];
[data addObject:dict6];

NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key1 == %@) AND (key2==%@)", @"tt",@"vv"]];
NSLog(@"%@",filtered);
Run Code Online (Sandbox Code Playgroud)

输出:

(
    {
        key1 = tt;
        key2 = vv;
    }
)
Run Code Online (Sandbox Code Playgroud)