Я бы хотел отсортировать объекты (или, возможно, строки данных) определенным образом. Основано на time
, но это значение может быть NULL. У меня есть второе значение sequence
, которое является числом, которое дает порядок, но оно может иметь число, которое больше не равно порядку столбца time
. Так что он должен хотя бы отсортировать время по порядку.
Допустим, у меня есть массив / дБ со следующим содержимым:
id time sequence
2 11:35 46
4 NULL 48
<b> 5 11:40 99</b>
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
<b> 5 11:40 99</b>
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
<b> 5 11:40 99</b>
1 11:55 55
Я хотел бы дать своей функции сравнения сказать что-то вроде "donне знаю "для определенных сравнений. Namelijk, когда строка с заполненным time
сравнивается с строкой без. Так что функция сортировки вынуждена смотреть дальше. Например, я попытался вернуть 0 в этом случае, но это не решает проблему. Есть ли название для такого рода механизма? Есть ли другой способ решить эту проблему?