Показать сообщение отдельно
Старый 22.04.2011, 09:14   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AndyD Посмотреть сообщение
Да и сравнивать надо значения одно типа (или сравниваемых, типа int и real). Потому как сказать, что больше или меньше 2 или 'Sumit Loya' невозможно. Да и что даст такое сравнение - то же непонятно.
вот правильный пример - обратите внимание на типы значений в окошках, которые показывают содержимое контейнера.
X++:
static void sortContainer(Args _args)
{
    container con = [5,1,2,'Sumit Loya',9, 'Ashish singh', NoYes::No];
    int len = conlen(con); // вычисляем только один раз!
    int i;
    int j;

    // принимаем значения любого типа
    // однако сравниваем как строки!
    int cmp(anytype a, anytype b)
    {
        // Здесь конечно надо бы возвращать три значения 1; 0; -1
        // но раз уж используем метод пузырька,
        // упрощаем не сильно заморачиваясь по поводу производительности
        // главное - методика сравнение двух anytype значений
        return(SysQuery::value(a) > SysQuery::value(b) ) ? 1 : -1;  // дает runtime error если внутри контейнера есть контейнер!
                                                                    // дает разные результаты, если выполняется в среде с разными языками
    }
    
    // меняем местами значения внутри контейнера
    void swapIf(int _i, int _j)
    {
        anytype a = conpeek(con, _i); // значения с типом anytype примут тип при первой инициализации
        anytype b = conpeek(con, _j); // повторные присваивания уже не изменят тип переменной anytype,
                                      // поэтому обмен приходится делать в локальном методе
        if( cmp(a, b) > 0 )
        {
            con = conpoke(con, _j, a);
            con = conpoke(con, _i, b);
        }
    }
;
 
    conview(Con,"con: before");

// Sort the container
    for (i = 1; i < len; ++i)
    {
        for (j = i + 1; j <= len; ++j)
        {
            swapif(i, j);
        }
    }
    conview(Con,"con: after");
}
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 304
Размер:	60.2 Кб
ID:	6782  
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 22.04.2011 в 10:33. Причина: добавил инфу о runtime error, и о чувствительности к языку