NSMutableArray按顺序添加对象

时间:2011-11-18 09:14:56

标签: objective-c nsmutablearray sorting

我有一个NSMUtableArray,其中包含元素,例如:

a,b,c,e

我想在d后面和c之前添加一个对象e。 换句话说,我想将一个对象插入一个有序数组。(该对象也可以是一个自定义对象)

我想知道:除了使用for找到位置外,还有其他方法可以实现吗?最好使用iOS API。

感谢。

3 个答案:

答案 0 :(得分:112)

您可以使用-[NSArray indexOfObject:inSortedRange:options:usingComparator:]向NSArray询问在给定当前已排序的数组范围的情况下应插入对象的索引。

例如,假设整个数组已排序::

NSMutableArray *array = …;
id newObject = …;
NSComparator comparator = …;

NSUInteger newIndex = [array indexOfObject:newObject
                             inSortedRange:(NSRange){0, [array count]}
                                   options:NSBinarySearchingInsertionIndex
                           usingComparator:comparator];

[array insertObject:newObject atIndex:newIndex];

由于此方法使用二进制搜索,因此它比迭代数组中的所有元素更有效。

比较器是一个块对象,它接收两个id类型的对象并返回NSComparisonResult值。

答案 1 :(得分:3)

将元素注入已知索引(位置)使用

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html

并找到先前放入NSMutableArray的对象的位置使用

- (int)indexOfObject:(id)anObject

NSMutableArray - Get Arrays Index Integer By Searching With A String

部分查找数组中的对象
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html

答案 2 :(得分:3)

我只是在两端添加新对象并再次对数组进行排序。如果您要添加的数组已经排序,那么移动一个对象的重新排序将与您自己实现的任何内容一样快。

NSMutableArray *things; // populated 
id newObject;
...
[things addObject:newObject atIndex:0];
[things sortUsingSelector:@selector(compare:)];