NSMutableArray Dodaj obiekt z zamówieniem
Mam NSMUtableArray
, który ma elementy, na przykład:
a,b,c,e
I chcę dodać obiekt d
za c
i przed e
.
Innymi słowy, chciałbym wstawić obiekt do posortowanej tablicy.(Obiekt może być również obiektem niestandardowym)
Chciałbym wiedzieć: czy poza użyciem for
do znalezienia pozycji, jest jakaś inna metoda jej wdrożenia? Lepiej jest użyć api iOS.
3 answers
Możesz użyć -[NSArray indexOfObject:inSortedRange:options:usingComparator:]
aby poprosić NSArray o indeks, w którym powinien być wstawiony obiekt, biorąc pod uwagę zakres tablicy, który jest aktualnie posortowany.
Na przykład, zakładając, że cała tablica jest posortowana::
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];
Ponieważ ta metoda wykorzystuje wyszukiwanie binarne, jest bardziej wydajna niż iteracja wszystkich elementów w tablicy.
Komparator jest obiektem blokowym, który odbiera dwa obiekty typu id
i zwraca wartość NSComparisonResult
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-26 16:25:04
Aby wprowadzić element do znanego indeksu (pozycji) Użyj
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index
I aby znaleźć pozycję obiektu wcześniej umieszczonego w nsmutablearray użyj
- (int)indexOfObject:(id)anObject
NSMutableArray-Get Arrays Index Integer By Searching With A String
Sekcja znajdowanie obiektów w Array
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:31:59
Dodałbym nowy obiekt na obu końcach i posortowałbym tablicę ponownie. Jeśli tablica, do której dodajesz jest już posortowana, ponowne sortowanie, które przenosi jeden obiekt, będzie tak szybkie, jak wszystko, co zaimplementujesz samodzielnie.
NSMutableArray *things; // populated
id newObject;
...
[things addObject:newObject atIndex:0];
[things sortUsingSelector:@selector(compare:)];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-18 10:49:27