Документация для NSSortStable неграмотна - что она пытается сказать?

У меня есть массив, который я хотел бы отсортировать, и, поскольку блоки в этом году "черные", я смотрел на

- (void)sortWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptr

Я посмотрел, какой вариант использовать, и NSSortStable В документации сказано:

Указывает, что отсортированные результаты должны возвращать сравниваемые элементы, имеющие одинаковое значение в порядке их появления.

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

У меня не было достаточно кофе, чтобы понять, что он говорит, первое предложение даже грамматически не правильно.

Кто-нибудь может перевести на английский для чайников?

3 ответа

Решение

NSSortStable указывает, что если два объекта сравниваются одинаково, их порядок должен оставаться неизменным.

Например, давайте рассмотрим следующее:

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"one", @"two", @"three", @"four", nil];
[array sortWithOptions:0 usingComparator:^NSComparisonResult(id obj1, id obj2) {
    if ( [obj1 length] < [obj2 length] )
        return NSOrderedAscending;
    if ( [obj1 length] > [obj2 length] )
        return NSOrderedDescending;
    return NSOrderedSame;
}];

Если вы не укажете NSSortStableотсортированный массив может быть (one, two, four, three) или же (two, one, four, three) как one а также two имеют одинаковую длину. Оба результата приняты. Это позволяет алгоритму сортировки работать (немного) быстрее.

При указании NSSortStableобъекты, которые сравниваются одинаково, должны быть возвращены в их первоначальном порядке (т.е. сначала one, затем two).

Стабильная сортировка - это та, которая максимально сохраняет порядок элементов.

Например, если вы сортируете по фамилиям, то стабильная сортировка будет сохранять имена в том же порядке, в котором они изначально были в контейнере. То есть если бы мы имели:

Bob Smith
Tom Jones
Dave Smith
Fred Smith
Al Jones

Было бы вроде

Tom Jones
Al Jones
Bob Smith
Dave Smith
Fred Smith

Обратите внимание, что Том все еще выше Ала, а Боб все еще выше Дейва, который все еще выше Фреда.

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

http://en.wikipedia.org/wiki/Sorting_algorithm

Я считаю, что "иметь" должно быть "иметь", вот так:

Указывает, что отсортированные результаты должны возвращать сравниваемые элементы, имеющие одинаковое значение в порядке их появления.

То есть, если сравниваемые элементы имеют одинаковую ценность, эти элементы должны сохранять свою сортировку относительно друг друга в конечных результатах.

Другие вопросы по тегам