Если сортировать записи по номеру в записи, но некоторые записи имеют одинаковое число, порядок не гарантируется, но не должен быть случайным? - PullRequest
1 голос
/ 05 августа 2010

Допустим, мы сортируем несколько записей по номеру в записи:

Name  Number_of_Language_Known
John  3
Mary  2
Peter 3
Mike  1
...

Если мы также не сортируем по Name, то порядок Иоанна и Петра не гарантирован, но он не должен быть случайным, если записи никогда не менялись? Я думаю, что это должно быть правдой в большинстве сред (то есть, ничего не изменилось, и сортировка выполняется дважды).

То есть, если мы отсортируем его один раз, это будет не Петр до Иоанна, а второй раз, Иоанн до Петра.

Это связано с тем, что в среде Ruby on Rails, если записи извлекаются из БД, а затем сортируются с помощью функции Ruby и печатаются как исходное содержимое страницы, порядок является односторонним, но если данные запрашиваются через AJAX затем отсортированные элементы массива могут иметь другой порядок для записей с одинаковым номером в этом числовом поле, и это кажется странным.

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

Ответы [ 2 ]

4 голосов
/ 05 августа 2010

«не гарантировано» означает, что оно может меняться в любое время (в зависимости от текущей разметки памяти, сборщика мусора, времени, ...), если вам нужен порядок сортировки другого атрибута, чтобы быть стабильным, вы должны отсортировать егопо обоим атрибутам (по идентификатору, а затем по имени - в вашем случае)

3 голосов
/ 05 августа 2010

Предполагая, что эти значения поступают из модели Active Record, порядок поступает из самой базы данных. Разные базы данных обрабатывают упорядочение по-разному, поэтому вам, вероятно, нужно будет проверить документы для вашей конкретной базы данных.

...