Я хотел бы сортировать объекты (или, возможно, строки базы данных) определенным образом. В основном основано на time
, но это значение может быть NULL. У меня есть второе значение sequence
, которое представляет собой число, указывающее порядок, но оно может иметь число, которое больше не соответствует порядку столбца time
. Так что он должен хотя бы отсортировать время по порядку.
Допустим, у меня есть массив/БД со следующим содержимым:
id time sequence 2 11:35 46 4 NULL 48 5 11:40 99 6 NULL 49 8 11:45 51 9 11:50 52 7 NULL 53 3 NULL 54 1 11:55 55
Я бы хотел, чтобы конечный результат был таким
id time sequence 2 11:35 46 4 NULL 48 6 NULL 49 5 11:40 99 8 11:45 51 9 11:50 52 7 NULL 53 3 NULL 54 1 11:55 55
Простая функция сравнения будет выглядеть примерно так (псевдокод)
int compare(a, b)
{
if(a->time !== null && b->time !== null)
return (int)a->time - (int)b->time;
return a->sequence - b->sequence;
}
Но общий вызов сортировки, конечно, ограничит количество вызовов функции сравнения. Поэтому, если он сравнит идентификаторы 5/1
, 5/3
и 1/3
, он определит порядок и выдаст этот результат.
id time sequence 2 11:35 46 4 NULL 48 6 NULL 49 8 11:45 51 9 11:50 52 7 NULL 53 3 NULL 54 5 11:40 99 1 11:55 55
Я хотел бы, чтобы моя функция сравнения говорила что-то вроде «не знаю» для определенных сравнений. Namelijk, когда строка с заполненным time
сравнивается со строкой без. Так что sort-функция вынуждена смотреть дальше. Например, я пытался вернуть 0 в этом случае, но это не решает проблему. Есть ли название для такого механизма? Есть ли другой способ решить эту проблему?