结合NSArrays

时间:2012-01-09 17:37:35

标签: objective-c cocoa nsarray

我有3个NSArrays:

项目:金额

A: 1
B: 2
C: 3

A: 2
E: 1
F: 6

C: 5
D: 1
F: 3

将这些“组合”成一个之后,我需要:

A: 3
B: 2
C: 8
D: 1
E: 1
F: 9

我首先将所有数组合并为一个,然后求和并删除重复项吗?

3 个答案:

答案 0 :(得分:3)

您可以使用NSCountedSet。我不清楚数组中数据的结构,但是假设你的B: 2意味着数组中有两个B,那么这样的东西就可以了:

NSCountedSet *set = [NSCountedSet setWithCapacity:[array1 count]+[array2 count]+[array3 count]];
[set addObjectsFromArray:array1];
[set addObjectsFromArray:array2];
[set addObjectsFromArray:array3];

// Test it out!
NSUInteger countForC = [set countForObject:objC];
// countForC == 8

答案 1 :(得分:1)

您可以尝试使用NSMutableDictionary,而不是使用NSArray,其中键是对象结构中固有的。这将允许您遍历每个字母和计数数组,然后使用键查询值,获取值并添加到值,然后继续处理。

答案 2 :(得分:0)

一种可能性是使用:

  • 使用谓词将(按项目)数据集提取到单独的数组中。请参阅Collection predicates guide
  • 键值编码,用于对每个结果数组的值字段求和(按项目)。见KVO collection operators
  • 以您喜欢的任何结构(NSArray或NSDictionary)弹出结果。

可能需要考虑性能因素。或者,迭代数组,在单独的NSDictionary中提取匹配的项目(键入项目)并随时求和。