2013-09-09 5 views
-2

У меня есть NSArray пользовательских объектов с свойством id, а другой NSArray из NSString. Второй массив - это список идентификаторов. Поэтому я хочу получить массив объектов, упорядоченных по порядку во втором массиве.Сортировка массива с использованием порядка в другом массиве

+0

Вы создали пользовательский объект с '@property ... id'? Звучит неплохо в Objective-C. Во всяком случае, что вы пробовали? – trojanfoe

+0

@trojanfoe, это должно быть любое другое свойство, например, имя. У меня есть список имен, и я хочу упорядочить список объектов с порядком списка имен. –

+0

Сравните http://stackoverflow.com/a/15944419/1187415 или http://stackoverflow.com/a/16518619/1187415. –

ответ

3

использовать NSSortDescriptor или сортировать с блоком, который выполняет сравнение в другом массиве.

How to sort an NSMutableArray with custom objects in it?

Update:

Поскольку ни объектов, ни список идентификаторов есть ссылка на другой, не существует эффективный способ, чтобы изменить порядок. Без введения новой коллекции вам придется многократно перебирать один из списков.

Единственный способ, которым вы можете сделать это эффективно, - это изменить свою архитектуру и использовать какую-либо карту хеша, например NSDictionary, чтобы вы могли быстро ссылаться на объект с идентификатора. В качестве альтернативы вы можете использовать ordered dictionary.

+0

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

+0

Я не могу придумать прямой способ эффективно переупорядочить их, если вы не поместите свои объекты в NSDictionary с ключом по их идентификатору. Затем создайте новый массив, перейдя через ваш массив идентификаторов, захватите объект из хэш-таблицы и вставьте его в новый массив. – Levi

+0

да, я не вижу никакого правильного решения, поэтому я задал вопрос здесь –