Коллекция объектов

Страницы: 1
RSS
Коллекция объектов, Получение значений коллекции с помошью функции GET_COLLECTION_ITEM
 
Добрый день! У меня коллекция чисел состоит допустим из 1000 элементов. Я опрашиваю эту коллекцию с помощью цикла FOR от 0 до 999 чтобы получить значения. Так как доступ к элементу коллекции осуществляется за линейное время - может ли так получиться, что будут пропущены некоторые элементы коллекции при опросе, то есть оператор GET_COLLECTION_ITEM вернет нулевое значение на каком нибудь шаге итерации цикла?
 
Добрый день.
Поясните, пожалуйста, почему Вы связываете время доступа с пропуском элементов?
 
Здравствуйте! выяснил, что нулевых значений нет, однако наблюдается теперь другая проблема - появляются лишние значения. Такое впечатление, что функция GET_COLLECTION_ITEM либо INSERT_COLLECTION_ITEM либо REMOVE_COLLECTION_ITEM работают неправильно. Вот часть  кода:

COL=CREATE_COLLECTION()


for index from 0 to 2

DELTA = DELTA()

DATA = GET_VALUE(GET_DATETIME(), "DATETIME")

COL=REMOVE_COLLECTION_ITEM(COL,99)
COL=INSERT_COLLECTION_ITEM(COL,0,DELTA)

MAXIMUM = -1000000
MINIMUM = 1000000

FOR J FROM 0 TO 99

VALUE = GET_COLLECTION_ITEM(COL,J)+0

IF VALUE > MAXIMUM
MAXIMUM = VALUE
END IF

IF VALUE < MINIMUM
MINIMUM = VALUE
END IF

END FOR

SPREAD = MAXIMUM - MINIMUM

WRITELN ("D:\log.txt","DATA_"&DATA&"_DELTA_"&DELTA&"_SPREAD_"&SPREAD)

index = index-1
end for

Здесь создается коллекия col и в нее записывается переменная DELTA. Затем я нахожу максимум и минимум за 100 значений и спред. Параллельно переменная DELTA записывается в лог файл. Затем я сравниваю полученное значение SPREAD и самостоятелно рассчитанное в эксель по значениям DELTA. В основном они точно совпадают, но иногда встречаются различия - примерно 1 раз в 200 значений. Идут несколько строчек с разными данными а потом опять выравнивается. Такое впечатление что функции COL=REMOVE_COLLECTION_ITEM(COL,99) COL=INSERT_COLLECTION_ITEM(COL,0,DELTA) иногда неправильно работают и неправильно сдвигают элементы коллекции.
 
Здравствуйте,
Из приведенного кода видно что Вы добавляете один элемент а считываете 99. При считывании несуществующих элементов коллекции возвращается мусор. Рекомендуем в цикле for использовать функцию GET_COLLECTION_COUNT для уточнений размера коллекции.

Также следует отметить что язык QPILE мы считаем устаревшим и рекомендуем перейти на новый язык QLUA
 
Здравствуйте! По поводу GET_COLLECTION_COUNT в цикле, спасибо  за подсказку, попробую. Только там считывается не 99 значений, а 100 - не так ли? Ведь нумерация коллекции с 0 начинается.
 
Цитата
Дмитрий пишет:
Здравствуйте! По поводу GET_COLLECTION_COUNT в цикле, спасибо за подсказку, попробую. Только там считывается не 99 значений, а 100 - не так ли? Ведь нумерация коллекции с 0 начинается.
Да 100, но от этого суть рекомендаций не меняется
Страницы: 1
Читают тему
Наверх