У меня возникли проблемы с сортировкой строки в методе приоритетной очереди, который я использую. Вот пример строки ключей, которые я сортировочных:Порядок строк для метода очереди приоритетов
[ '.0', '.1', '.2', '.4', '.2.1', '.3', '.4.1', '.5', '.5.1.5' ]
Значения представление иерархии, которые должны быть заказаны от наименьшего к наибольшему. В результате я ожидаю это:
[ '.0', '.1', '.2.1', '.2, '.3', '.4', '.4.1', '.5', '.5.1.5' ]
метод я использую, чтобы впихнуть в мою очередь работает на O(log n)
и выглядит так:
queue.add = function(myval) {
// console.log(myval);
var i = this.size;
this.array[this.size++] = myval;
while (i > 0) {
var p = (i - 1) >> 1;
var ap = this.array[p];
if(!this.compare(myval, ap)) break;
this.array[i] = ap;
i = p;
}
};
И моя функция сравнения просто:
(a, b) => {
return a[0] < b[0];
}
Я рассматривал возможность использования localeCompare, но так как я нахожусь в узле, по какой-то причине он не выглядит надежно. Когда я использую:
(a, b) => {
return a[0].localeCompare(b[0]) > 0;
}
Я получаю compareLocal неопределенной ошибки, которая может быть связана с чем-то другим.
Мой вопрос, следовательно, как я могу эффективно определить порядок строк в том порядке, который я изложил?
Как ' '.2.1'' меньше, чем'' .2''? –
Как вы называете метод 'add()'? –
Вы хотите отсортировать массив или поддерживать правильный порядок при добавлении новых элементов? – Assan