|
|
#8 |
|
Участник
|
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; } С Map таких проблем нет, так как мы сами указываем тип ключевого поля. и они вставляются последовательно (сортированно), и значение ключевого поля не пугает величиной. ------ Но, и в том и в другом случае при переходе между строками, необходимо делать проверку существования значения, что сказывается на производительности. + кушает память (при большом кол-ве записей, если мы пройдемся по ним) Я использую Map, когда необходимо выбрать небольшое кол-во значений. Но это - IMHO. Последний раз редактировалось kashperuk; 07.04.2007 в 12:42. Причина: Добавил шутку :) |
|
|
|
| За это сообщение автора поблагодарили: belugin (6). | |