2009-03-19 3 views
0

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

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

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

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

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

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

+0

Решение, данное Галгамоном, - это то, что я реализовал на данный момент: единственная проблема заключается в том, что «current_index» равен 0, а «total_count» равен 1, это будет как 0 в «items_to_fatch», переменная ... – Antonello

ответ

0

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

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

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

items_to_fetch = min(current_index + fetch_size, total_count) 
0

Как насчет:

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^