Использование сортировки запросов

Я пытаюсь использовать сортировку запросов ColdFusion 2016.

Я основываю сортировку на сортировке массива Рэймонда Камдена.

http://www.raymondcamden.com/2012/08/14/Another-ColdFusion-10-Closures-Post/

<cfscript>
    qryTest = QueryNew("ID,Name");
    qryTest.AddRow([ 
        {id=1,name="One"}, 
        {id=2,name="Two"}, 
        {id=3,name="Three"}, 
        {id=4,name="Four"} 
    ]);
    qryTest.sort(function(a, b) {
       return a.name > b.name;
    });
    writedump(qryTest);
</cfscript>

введите здесь описание изображения

Это баг или я что то не так делаю? Или функция-член сортировки не совпадает с QuerySort()

https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-m-r/querysort.html#main-pars_header


person James A Mohler    schedule 19.02.2016    source источник
comment
(Редактировать) Вы пытались заменить > или < на compare(), как в комментариях, чтобы он возвращал -1,0 или 1, как с компараторами Java?   -  person Leigh    schedule 19.02.2016
comment
Ppl может захотеть получить этот билет bugbase.adobe.com/index.cfm? event=bug&id=4119993, чтобы улучшить документы и сделать их действительно полезными?   -  person Adam Cameron    schedule 19.02.2016


Ответы (1)


Пример Рэя относился к бета-версии CF10. См. этот комментарий . В выпуске CF10+ компаратор должен возвращать 1, 0 или -1.

Использовать это. При выполнении a.name > b.name он просто возвращает true/false. Вам нужно вернуть 1/-1.

<cfscript>
    qryTest = QueryNew("ID,Name");
    qryTest.AddRow([ 
        {id=1,name="One"}, 
        {id=2,name="Two"}, 
        {id=3,name="Three"}, 
        {id=4,name="Four"} 
    ]);
    qryTest.sort(function(a, b) {
       return a.name > b.name ? 1 : -1;
    });
    writedump(qryTest);
</cfscript>

введите здесь описание изображения

person rrk    schedule 19.02.2016
comment
Да, именно это я и упомянул в предыдущем комментарии. Хотя не уверен, почему это будет работать в CF10 (это НЕ работать на сайте trycf.com). Кажется, он основан на концепции Comparator/Comparable в java, т.е. вернуть -1,0 или 1. Это было давно и мало изменилось... - person Leigh; 19.02.2016
comment
упомянутый в моем предыдущем комментарии Упс, мой плохой. Судя по временным меткам, этот ответ был опубликован ранее. Проклятые уведомления задерживаются! Ну хорошо, что я уже проголосовал за него :-) - person Leigh; 19.02.2016
comment
@Leigh: Если я правильно помню... Статья в блоге Рэя была написана во время предварительного выпуска CF10. В то время реализация была глючной. Это было исправлено перед релизом. - person Adam Cameron; 19.02.2016
comment
@AdamCameron - А, это объясняет, потому что простые > или < не должны работать в этом контексте. Я помню, как пробовал то же самое в java, получил тот же неправильный результат... и удивлялся, почему ;-) - person Leigh; 19.02.2016