Определите количество предметов для выборки - PullRequest
0 голосов
/ 19 марта 2009

Я пишу ленивый список для извлечения элементов из базы данных с заданными критериями и заданной страницей (начальный индекс и желаемое количество элементов).

При создании экземпляра списка я подсчитываю общее количество элементов в сопоставленной таблице, чтобы у меня был начальный размер списка ( начальный , поскольку список позволяет добавлять и удалять элементы ).

Это почти работает, но у меня возникают некоторые проблемы при определении конкретного количества элементов для выборки: на самом деле, я позволяю пользователям указывать определенный размер выборки (скажем, 10 , в этом примере).

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

На самом деле, для вычисления количества оставшихся элементов я вычитаю из общего количества элементов в коллекции текущий индекс + 1 (индекс начинается с нуля), который не работает в все условия.

У вас есть представление о том, как вычислить правильные факторы? Большое спасибо вам, ребята!

Ответы [ 3 ]

0 голосов
/ 19 марта 2009

Как насчет:

items_to_fetch = max(0, min(fetch_size, total_count - current_index + 1))

Также убедитесь, что вы получаете текущий общий счетчик во время выполнения, а не какое-то кэшированное значение.

0 голосов
/ 19 марта 2009

Спасибо за ответы, но я нашел решение, которое не было ни столь очевидным, ни таким простым:

index -> destination index (within the collection)
diff_to_index -> index - current_index
items_to_fetch -> (current_index + 1) + items_to_fetch >= total_count ? total_count - (current_index + 1) : max(diff_to_index, fetch_size)

Ура! :)

0 голосов
/ 19 марта 2009

Я считаю, что вы должны сделать что-то вроде:

items_to_fetch = min( current_index + fetch_size, total_count )
...