如何通过其键中的子字符串过滤NSDictionary?

时间:2014-03-17 16:17:09

标签: objective-c nsarray nsdictionary nspredicate

说我有一个NSDictionary,它的键是这样的:

  1. @"123_000"
  2. @"223_000"
  3. @"123_111"
  4. @"223_111"
  5. 等等。我希望得到所有值的NSArrayNSSet,其对应的键包含子串@"123"

    当然我可以循环遍历NSDictionary,但我怀疑必须有较少的代码繁重方法,可能涉及KVCNSPredicate,但我不是真的他们中的任何一个都很好。

3 个答案:

答案 0 :(得分:3)

是的,请使用NSPredicate

首先从字典中获取allKeys。然后使用filteredArrayUsingPredicate:获取所需的密钥列表。然后使用objectsForKeys:notFoundMarker:和您生成的键组来获取关联的对象(未找到的标记不是问题,因为我们知道所有键都存在)。

答案 1 :(得分:0)

纠正VaaChar的答案:

在我的例子中,我有一个只有键和值的字典(纯素:1,牛排:2,......)

要检查我的字符串是否在这些键中,我使用:

NSPredicate *predicate  = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@", keyword];
NSArray *categories     = [[self.categoriesAndIDs allKeys] filteredArrayUsingPredicate:predicate];

SELF表示给定数组的当前对象,在我的情况下[self.categoriesAndIDs allKeys],因此将检查数组中的每个字符串是否有我的“关键字”,例如“steak”或“st”,结果将是一个名为“steak”的字符串数组。

答案 2 :(得分:-1)

您可以使用以下内容:

NSArray *resultArray = [[mainDict allValues] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.@allKeys CONTAINS[c] %@", @"123"]];

“self。@ allKeys”应该返回词典的所有键,“CONTAINS [c]%@”检查键是否包含“123”。