我有一个NSMUtableArray
,里面有元素,例如:
a,b,c,e
我想在c
和e
之间添加一个对象d
,换句话说,我想向已排序的数组中插入一个对象(对象也可以是自定义的对象)。
请问:除了使用for
循环查找位置外,还有其他方法来实现吗?最好使用iOS API。
谢谢。
我有一个NSMUtableArray
,里面有元素,例如:
a,b,c,e
我想在c
和e
之间添加一个对象d
,换句话说,我想向已排序的数组中插入一个对象(对象也可以是自定义的对象)。
请问:除了使用for
循环查找位置外,还有其他方法来实现吗?最好使用iOS API。
谢谢。
你可以使用-[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
值。
要将元素注入到已知的索引(位置),请使用
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index
要查找之前放置在NSMutableArray中的对象位置,请使用以下方法:
- (int)indexOfObject:(id)anObject
NSMutableArray - Get Arrays Index Integer By Searching With A String
我会在数组的两端添加新对象并重新对数组进行排序。如果你要添加的数组已经排好序了,那么重新排序只需要移动一个对象,将会和你自己实现的任何其他方法一样快。
NSMutableArray *things; // populated
id newObject;
...
[things addObject:newObject atIndex:0];
[things sortUsingSelector:@selector(compare:)];