Есть, вероятно, много способов, чтобы значительно повысить производительность, но, чтобы быть в состоянии предложить любой, мы действительно должны знать больше о том, что объекты в массивах «являются»: то, что они представляют ? Как они используются? (Так, например, являются элементы в массиве хранилища отображается в виде таблицы?)
NSMutableDictionary
, NSMutableSet
и т.д. может быть объединен с NSMutableArray
организовать и реализовать модель в эффективном образе.
Например, предположим, что мы знаем, что объект представляет человека: MDPerson
. У человека есть пол, дата рождения, имя, уникальный идентификатор и набор атрибутов, которые могут измениться. Учитывая это более высокое понимание того, что представляет объект, мы знаем, что 2 человека равны, только если их уникальные идентификаторы одинаковы (другими словами, 2 разных человека могут иметь одинаковое имя, пол и дату рождения). Предположим, что ваш главный NSMutableArray
составлен из списка из 3000 человек. Входящий массив состоит из 500 человек, которые уже находятся в главном NSMutableArray
. Некоторые из этих 500 человек могут иметь «обновленные» атрибуты, а это значит, что их экземпляр в основном массиве должен быть обновлен этой информацией.
Учитывая это понимание, ясно, что основной список должен быть реализован как NSMutableDictionary
, а не NSMutableArray
. В словаре единственным ключом будет уникальный идентификатор человека, и его экземпляр для лица будет значением для ключа. Вы могли бы затем цикл через входящий массив из 500 человек только один раз:
// main dictionary is called personIDsAndPersons
for (MDPerson *person in incomingPersons) {
MDPerson *existingPerson = [personIDsAndPersons objectForKey:[person uniqueID]];
// if nil, the person doesn't exist
if (existingPerson) {
// update the existing person's attributes
[existingPerson setUniqueAttributes:[person uniqueAttributes]];
}
}
Опять же, не зная больше деталей или имеющих более высокий уровень понимания того, что эти объекты, мы действительно просто съемки в темноте ,
Вы упомянули, что 2 предмета являются одинаковыми, если они имеют одинаковое имя. Значит ли это, что каждый элемент в основном массиве из 3000 объектов имеет уникальное имя? Если это так, вы можете использовать NSMutableDictionary
, чтобы обеспечить эффективный доступ к объектам, указав ключи в словаре как имя, а значения - экземпляр объекта.Затем вы можете использовать отдельный NSMutableArray
, который используется только для целей показа: он позволяет упорядоченную, отсортированную организацию тех же объектов, которые хранятся в NSMutableDictionary
. Помните, что когда вы добавляете объект в массив или словарь, обычно вы не создаете новую копию, вы просто сохраняете существующий объект.
Это не будет делать то, что мне нужно: объекты не являются идентичными, только Значение `- [имя объекта]` равно – 2010-12-15 21:36:45