Question

J'écris une liste paresseuse pour récupérer des éléments d'une base de données avec des critères et une pagination donnés (index de démarrage et nombre d'éléments souhaités).

À l’instanciation de la liste, je compte le nombre total d’éléments dans la table mappée, afin d’avoir une taille initiale de la liste ( initiale , car la liste permet l’ajout et la suppression de éléments).

Cela fonctionne presque, mais je ne parviens pas à déterminer le nombre d'éléments à récupérer: en fait, je laisse les utilisateurs spécifier un taille de récupération (disons 10 , dans cet exemple).

Pour déterminer le nombre exact d'éléments à récupérer, pour le moment, j'ajoute le facteur taille de récupération au index actuel des éléments de la collection (le le dernier récupéré dans la table de la base de données): si le résultat est inférieur ou égal au nombre total, je ne fais aucune action (et le fetch fonctionne parfaitement bien), mais s'il est plus grand que le total, mon calcul du Les éléments restants à récupérer échouent.

En fait, pour calculer le nombre d'éléments restants, je soustrais du nombre total d'éléments de la collection, le index actuel + 1 (l'index est basé sur zéro), ce qui ne fonctionne pas. dans toutes les conditions.

Avez-vous une idée sur la façon de calculer les bons facteurs? Merci beaucoup les gens!

Était-ce utile?

La solution 3

Merci pour les réponses, mais j'ai trouvé la solution qui n'était ni si évidente ni si simple:

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)

Salut! :)

Autres conseils

Je crois que vous devriez faire quelque chose comme:

items_to_fetch = min( current_index + fetch_size, total_count )

Que diriez-vous de:

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

Assurez-vous également d'obtenir le nombre total actuel au moment de l'exécution, et non une valeur mise en cache.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top