Показать сообщение отдельно
Старый 07.04.2007, 12:25   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Array vs Map
Вообще, это похожие структуры - коллекции.

Насколько можно судить из работы класса Array, при вставке записи по большому индекску, генерируются дефолтные значения для всех индексов с незаполненными значениями до него.
То есть если в качестве индекса для массива использовать recId текущей записи (потому что нам все таки нужно уникальная идентификация строки), то массив будет всегда получаться очень большой.

Можно выполнить нижеприведенный job для сравнения.
И как говорится, извините, если Ваша Ахапта упадёт из-за Out of Memory во втором случае
X++:
static void Job35(Args _args)
{
    Array   arr = new Array(Types::Integer);
    Map     map = new Map(Types::Integer, Types::Integer);
    ;
    map.insert(92332432, 32432);
    print "map inserted";
    pause;
    print map.lookup(92332432);
    print map.exists(32432);
    print map.exists(1);
    pause;


    arr.value(92332432, 32432);
    print "Array inserted";
    pause;
    print arr.value(32432);
    print arr.value(1);
    print arr.exists(250);
    pause;
}
Более того, в DAX 4.0 тип для индекса остался int, в то время, как тип для RecId стал Int64. То есть использовать RecId в качестве индекса на 4ке уже не корректно.

С Map таких проблем нет, так как мы сами указываем тип ключевого поля. и они вставляются последовательно (сортированно), и значение ключевого поля не пугает величиной.

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

Я использую Map, когда необходимо выбрать небольшое кол-во значений. Но это - IMHO.

Последний раз редактировалось kashperuk; 07.04.2007 в 12:42. Причина: Добавил шутку :)
За это сообщение автора поблагодарили: belugin (6).