Показать сообщение отдельно
Старый 09.10.2012, 12:23   #5  
McArrow is offline
McArrow
Участник
 
45 / 38 (2) +++
Регистрация: 18.05.2009
Вообще интересная ситуация.

Если поменять
Dimension value, result;
на явное объявление массива
str value[10], result[10];

то получается ошибка времени выполнения - Неверная операция над массивом данного типа - что как-бы намекает на некорректность кода.

Если же сменить тип данных со string на real (как нужно было в реальной задаче), то джоб выполняется без ошибок, но в результате выполнения нули, а на больших выборках - мусор. При этом аксапта ни на что не ругается

X++:
static void ArrayMapExample3(Args _args)
{
    real value[3];
    real result[3];
    Map map;
    MapEnumerator me;
    int64 key;
;
    map = new Map(Types::Int64, Types::Real);

    key = 1; value[1] = 1.0; value[2] = 2.0; value[3] = 3.0;
    map.insert(key, value);

    key = 2; value[1] = 3.0; value[2] = 2.0; value[3] = 1.0;
    map.insert(key, value);

    key = 3; value[1] = 1.0; value[2] = 3.0; value[3] = 2.0;
    map.insert(key, value);

    me = map.getEnumerator();
    while (me.moveNext())
    {
        key = me.currentKey();
        result = me.currentValue();
        info(strfmt('%1;%2;%3;%4', key, result[1], result[2], result[3]));
    }
}
Получается, что в зависимости от типа данных массива система здесь ведёт себя по-разному.
Думаю свернуть свои эксперименты с массивами и использовать контейнер. Спасибо!