Объединение NSArrays - PullRequest
       4

Объединение NSArrays

0 голосов
/ 09 января 2012

У меня есть 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 ]

3 голосов
/ 09 января 2012

Вы можете использовать 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 голос
/ 09 января 2012

Вместо использования NSArray вы можете попробовать использовать NSMutableDictionary, где ключ присущ структуре объектов. Это позволит вам перебирать каждый из ваших массивов букв и счетчиков, затем запрашивать значение с помощью ключа, получать значение и добавлять к значению, а затем продолжать обработку.

0 голосов
/ 09 января 2012

Одна возможность будет использовать:

  • Использование предикатов для извлечения одинаковых наборов данных (по элементам) в отдельные массивы. См. Руководство по предикатам коллекции
  • Key Value Coding для суммирования поля значений каждого из полученных массивов (по элементам). См. Операторы сбора KVO .
  • Получите результаты в любой структуре, которая вам нравится (NSArray или NSDictionary).

Возможны соображения производительности. В качестве альтернативы можно выполнить итерацию массива, извлекая совпадающие элементы в отдельном NSDictionary (на основе элемента) и суммируя по мере продвижения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...