不使用for循环更新字典数组中的键值对

时间:2014-09-05 10:39:24

标签: ios objective-c replace nsmutablearray nsmutabledictionary

我在一个数组中有几个字典(NSDictionary)(NSMutableArray)。

所有词典都具有相同的键但值不同。

示例:

({
    Price = 100;
    Quantity = 3;
},
{
    Price = 200;
    Quantity = 5;
})

有没有办法在不使用for循环的情况下一次更新所有词典中特定键的值。

也就是说,有没有办法一次性为数组中的所有字典设置Quantity = 0?

编辑:我正在寻找性能,因为我有大量的词典,而且我假设可能有更快的方法来执行此操作而不是使用for循环。

2 个答案:

答案 0 :(得分:1)

在这种情况下,enumerateObjectsUsingBlock是您的朋友。

[dictionaryArray enumerateObjectsUsingBlock:^(NSDictionary *dict, NSUInteger idx, BOOL *stop) {

}];

但是,循环浏览字典时,enumerateObjectsUsingBlock的性能要好得多。

这是对objective-c中循环性能的一个很好的分析: http://iosdevelopertips.com/objective-c/high-performance-collection-looping-objective-c.html

答案 1 :(得分:1)

假设字典是可变的,您可以[array setValue:@0 forKey:@"Quantity"];。这是使用键值编码-setValue:forKey:方法。通常情况下,这只会设置接收器的属性,但对于NSArray,它会记录在每个元素上执行该方法:

  

使用指定的值和键在每个数组项上调用setValue:forKey:。

请注意,任何人都可以提供的任何技术都将使用循环引擎。你唯一能做的就是让框架为你做循环。