2014-02-11 2 views
0

У меня есть 4 NSArray, в котором каждый объект является словарем. Что-то вроде этого:Массив массива Objective-C

**Array1 - 30 objects(dictionaries):** 

[0] 
<Key>Name</key> - <Value>Paul</value> 
<Key>City</key> - <Value>New York</value> 
<key>Birthday</key> - <value>5.4.1954</value> 

[1] 
<Key>Name</key> - <Value>John</value> 
<Key>City</key> - <Value>New York</value> 
<key>Birthday</key> - <value>1.17.1936</value> 
etc. 

**Array2 - 40 objects(dictionaries):** 

[0] 
<Key>Name</key> - <Value>Queen</value> 
<key>Birthday</key> - <value>5.4.1970</value> 

[1] 
<Key>Name</key> - <Value>TennesseeKids</value> 
<key>Birthday</key> - <value>1.17.1995</value> 

etc. 

Все массивы имеют ключ «день рождения».

I Want: объединить весь массив в одном большом NSMutableArray/NSMutableDictionary и получить первые 10 записей заказанных даты.

Я не спрашиваю вас, как заказать мою запись по дате или что-то в этом роде. Я просто хочу знать, что является лучшим способом реализовать мою идею.

Я пытался добавить все массивы в NSMutableDictionary:

[_mainDictionary setObject:array1 for key:@"firstarray"]; 
[_mainDictionary setObject:array2 for key:@"secondarray"]; 
[_mainDictionary setObject:array3 for key:@"thirdarray"]; 
[_mainDictionary setObject:array4 for key:@"fourarray"]; 

Но я не думаю, что это лучший способ сделать это.

Надеюсь на вашу помощь. Приветствия.

+0

Чтобы получить значения по дате, вам необходимо установить их временную метку. Когда вы добавляете к массиву новый объект NSDictionary', он должен иметь ключ '' date '' с текущей датой, установленной как его значение. – 68cherries

+0

Вам действительно нужны словари? Я думаю, что лучший подход - использовать простые «Объекты данных» и объединить их в один массив. Затем вы можете отфильтровать их с помощью 'NSPredicate' – matthisb

+0

В этом большом массиве я хочу узнать имя массива для каждой записи. Например, мне нужно знать, что Пол из Нью-Йорка и дата 5.9.1954 - из array1, а TennesseeKids - из array2 – user3296088

ответ

2

Вы хотите объединить несколько массивов в один массив. Создайте NSMutableArray и вызовите addObjectsFromArray: многократно, каждый раз с одним из других массивов в качестве аргумента. Теперь у вас есть один набор словарей, которые вы можете сортировать/фильтровать.

Ваш текущий код добавляет массивы в словарь, который не будет предлагать вам какую-либо поддержку при сортировке/фильтрации.

+0

Извините, но я забыл что-то сказать. Я хочу знать имя массива для каждой записи (array1 или array2,3,4) ... – user3296088

+0

Являются ли содержимое массива уникальным? Вы можете использовать 'contains:' после сортировки, фильтрации и выбора элемента. Или, лучше, добавьте пару ключ/значение в словари, чтобы сказать, откуда они происходят. Возможно, вам лучше спросить о ваших исходных данных и ваших требованиях с точки зрения пользователя. Как вы попали в несколько разных массивов? – Wain

+0

elf.array1 = [NSJSONSerialization JSONObjectWithData: параметры ответа: NSJSONReadingMutableLeaves error: & error]; Вы хотите сказать, что мне нужно добавить дополнительную пару значений ключа для каждой записи в массиве 1? Что-то вроде этого: nameOfThearray - array1? UPDATE: Когда я пытаюсь добавить дополнительную пару значений ключа в массив1, он прерывается с исключением: метод мутирования, отправленный на неизменяемый объект – user3296088

1

Объедините все массивы в один массив.

NSMutableArray *all = [firstArray mutableCopy] 
[all addObjectsFromArray:secondArray]; 
... add 3rd, 4th 

Тогда вы можете отсортировать этот массив «все». Посмотрите на How to sort NSArray of objects based on one attribute на примере сортировки массива.

Смежные вопросы