Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   сортировка... угадайте от какого слова... (http://www.flasher.ru/forum/showthread.php?t=30721)

Nox Noctis 23.04.2002 17:36

сортировка... угадайте от какого слова...
 
Код:

function retrace(what) {
        trace("");
        for (var i = 0; i<what.length; i++) {
                trace(i+" :: "+"{x: "+what[i].x+" ; y: "+what[i].y+"}");
        }
}
//
test= [{x:150, y:20}, {x:50, y:20}, {x:200, y:20}, {x:10, y:20}, {x:100, y:20}];
//
retrace(test);
test.sortOn("x");
retrace(test);

нууу.... сортировка определенно есть.... вот только что делает после сортировки объект со значением x=50 на последнем месте ?! либо я чего-то не понимаю, либо одно из двух....

Nox Noctis 23.04.2002 18:06

сэр, на вас горят носки...
 
эврика, елкить....
там строковая сортировка происходит... так что надо что-то придумывать (ведущие нули, например, учитывать), либо самому сортировку писать...

а жаль...

вопрос в принципе снят...

УильямБрэдберри 23.04.2002 22:53

для других...
 
а надо было всего-то дописать метод. ;)
см [RTFM]

order = function(a,b)
{
a = Number(a)
b = Number(b)
if (a > b) return -1
if (a < b) return 1
if (a == b) return 0
}

myArray.sortOn(order);

Nox Noctis 23.04.2002 23:13

ув. тов. УильямБрэдберри,
при всем уважении к вашим творческим заслугам,
иногда стиль Ваших высказываний, предполагающий абсолютную убогость собеседника, несколько напрягает, что, конечно, является Вашим личным делом, но может травмировать людей с более хрупкой душевной организацией :D

я читал хелп, представляешь ?! да-да... и такое бывает...

но мне нужна сортировка по заданному _полю_ объекта в массиве _объектов_

за этим мне и понадобилась функция массив.сортОн !

применить стандартную сортировку с заданной сортировочной функцией мне не удалось... (либо это у меня руки кривые, либо не судьба)
поэтому я стал использовать сортОн ([RTFM] :) ), при применении которой и вспомнил о "строковости" сортировки...

Nox Noctis 23.04.2002 23:22

мм... хорошо, я признаю, что недоэкспериментировал с обычным сортом:

предложенный тобой код (тот же, который пытался использовать я) не работает,
но если внести Нумбер'ы в скобки ифов - то все пучком...

order = function (a, b) {
if (Number(a.x)<Number(b.x)) {
return -1;
}
if (Number(a.x)>Number(b.x)) {
return 1;
}
if (Number(a.x) == Number(b.x)) {
return 0;
}
};

хотя если делать так, то придется для сортировки по каждому из полей писать сортировочную функцию.... или придумать что-нибудь хитрецкое....

john 24.04.2002 04:00

Код:

//-------------------------------------------------------------------------
//        sort array elements by object property value (number)
//-------------------------------------------------------------------------

Array.prototype.sortOnNum = function(param)
{
        var sortOn_function = function(a,b)
        {
                var param = arguments.callee.param;
                a = Number(a[param]);
                b = Number(b[param]);
                return (a<b)*-1||(a>b)*1||0;
        }
       
        sortOn_function.param = param;
        this.sort(sortOn_function);
}

© john :)

Nox Noctis 24.04.2002 11:07

:))
все дети любят, все мамы советуют :D

SPV 24.04.2002 11:48

Мишань, а так:
Код:

function order (a, b) {
  if (a.x < b.x) {
    return -1;
  } else if (a.x > b.x) {
    return 1;
  } else {
    return 0;
  }
 }

function retrace (what) {
        trace ("");
        for (var i = 0; i<what.length; i++) {
                trace (i+" :: "+"{x: "+what[i].x+" ; y: "+what[i].y+"}");
        }
}
//
test = [{x:150, y:20}, {x:50, y:20}, {x:200, y:20}, {x:10, y:20}, {x:100, y:20}];
//
retrace(test);
test.sort(order);
retrace(test);


УильямБрэдберри 24.04.2002 12:20

Цитата:

Оригинал написал(а) Nox Noctis
ув. тов. УильямБрэдберри,
при всем уважении к вашим творческим заслугам,
иногда стиль Ваших высказываний, предполагающий абсолютную убогость собеседника, несколько напрягает, что, конечно, является Вашим личным делом, но может травмировать людей с более хрупкой душевной организацией :D

Обычно люди читают мои "высказывания" наспех...
не обращая внимания на такую мелочь, как заголовок...
subj
потом обижаются... :(

там ж НАПИСАНО "ДЛЯ ДРУГИХ"
я -то грешным делом подумал, что такой продвинутый (без кавычек) флэшер , как Nox Noctis уже разобрался с какими-то там полями...
и поэтому он закрыл тему...

Я же, в свою очередь посчитав ее незавершенной, для других, интересующихся этой же темой я и написал те строки дабы натолкнуть остальных на нужную мысль...;)
и ни в коей мере не пытаясь как-то задеть якобы мифическую "убогость" первооткывателя топика :D

Nox Noctis 24.04.2002 12:21

2SPV
Паш, почитал бы ты базар, который чуть выше написан :)

изначально вопрос был в чем:
почему сортирую числа, а, например число 50 ставится после числа 120... потом до меня дошло, что сортировка строковая и возник другой вопрос - а кто идет за клинским ;)

и твой метод сортировки тоже будет сравнивать построково...

2УильямБрэдберри
извини, я тебя не так понял :)
вчера вечером настроение было паршивое, да еще так обидно стало, что не заметил сразу ту фишку с внесением нумберов внутрь (и врезультате столько всего нагородил...)... залезаю сюда - а тут как раз сообщение, что мол "все гениальное просто, обратное неверно" ;)

а с полями я и правда разобрался... до того, как обычный сорт научился применять :D
если я вам покажу как именно я, кхм, "разобрался" - вы уржетесь :D :D


Часовой пояс GMT +4, время: 01:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.