目标C语言 如何通过关键字中的子字符串过滤NSDictionary



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

  1. @"123_000"
  2. @"223_000"
  3. @"123_111"
  4. @"223_111"

等等。我想获得所有值的NSArrayNSSet,其对应的键包含子字符串@"123"

当然,我可以循环NSDictionary,但我怀疑必须有一个较少的代码繁重的方法,可能涉及KVCNSPredicate,但我不是很擅长它们。

是的,使用NSPredicate

首先从字典中获取allKeys。然后使用filteredArrayUsingPredicate:获取所需的键列表。然后使用objectsForKeys:notFoundMarker:与结果键数组来获得相关对象(未找到标记不是问题,因为我们知道所有键都存在)。

纠正VaaChar的答案:

在我的例子中,我有一个只有键和值的字典(vegan: 1, steak: 2,…)

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

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

SELF表示给定数组的当前对象,在我的例子中是[SELF]。categoresandids allKeys]因此数组中的每个字符串都将检查我的"关键字",例如:"steak"或"st",结果将是一个字符串"steak"的数组。

你可以这样写:

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

"自我。@ allkeys "应该返回字典中的所有键,"CONTAINS[c] %@"检查键是否包含"123"。

最新更新