plist1是一个包含40个字典的数组,每个字典有4个字符串。 plist2也是一个数组,但有120个字典,每个字符串有2个字符串。
如果我列出一个桌上曲棍球联赛中的所有球队(从plist1中的某个键填充),请说我选择了第五个。这会推动一张新桌子。 plist2中的120个词典有两个字符串 - 每个字符串都有一个联盟历史记录的一年,还有一个是谁赢得了当年的冠军。我希望第二个表只列出字典的第二个键是在第一个表plist1中选择的同一个团队名称的年份。因此,当我从第一张表中选择“5”队时,我希望只能看到第二张表中队伍“5”获胜的年份。这个想法是所有年份都会出现在plist2中,但不相关的那些将在移动中的实际表中被阻止。
我怎么说“如果用户选择了X队,那么只为X队展示年份,而不是所有年份。”
谢谢!
答案 0 :(得分:2)
实际上你可以使用NSPredicate
非常好地进行这种过滤:
NSDictionary *testA = [NSDictionary dictionaryWithObjectsAndKeys:@"valA", @"key1", @"1", @"key2", nil];
NSDictionary *testB = [NSDictionary dictionaryWithObjectsAndKeys:@"valB", @"key1", @"2", @"key2", nil];
NSDictionary *testC = [NSDictionary dictionaryWithObjectsAndKeys:@"valC", @"key1", @"1", @"key2", nil];
NSDictionary *testD = [NSDictionary dictionaryWithObjectsAndKeys:@"valD", @"key1", @"3", @"key2", nil];
NSArray *testArr = [NSArray arrayWithObjects:testA, testB, testC, testD, nil];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"key2 == %@", @"1"];
NSArray *testFilter = [testArr filteredArrayUsingPredicate:pred];
NSLog(@"%@", testFilter);
此设置创建4个词典及其数组。过滤器表达式现在搜索key2
等于1
的所有包含对象,其中testA
和testC
应为2011-11-24 18:57:07.822 testapp[9977:f803] (
{
key1 = valA;
key2 = 1;
},
{
key1 = valC;
key2 = 1;
}
)
。瞧,输出是:
NSDictionary
通过这种方式,您可以创建谓词以按团队名称进行过滤,并创建阵列的过滤版本。通常,这适用于支持键值编码的所有类型的对象({{1}}执行,进一步信息:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples.html#//apple_ref/doc/uid/20002170)