Domanda

Sto scrivendo un elenco pigro per recuperare elementi da un database con un determinato criterio e un determinato paging (inizio indice e numero di elementi desiderati).

All'istanza dell'elenco conto il numero totale di elementi nella tabella mappata, in modo da avere una dimensione iniziale dell'elenco ( iniziale , poiché l'elenco consente l'aggiunta e la rimozione di elementi).

Funziona quasi, ma sto riscontrando dei problemi nel determinare il numero concreto di elementi da recuperare: in effetti, lascio che gli utenti specifichino una dimensione di recupero (diciamo 10 , in questo esempio).

Per determinare il numero esatto di elementi da recuperare, al momento, aggiungo il fattore dimensione di recupero all' indice corrente degli oggetti nella raccolta (il ultimo recuperato dalla tabella del database): se il risultato è inferiore o uguale al conteggio totale, non eseguo alcuna azione (e il recupero funziona in modo chiaro), ma se è maggiore del totale, il mio calcolo del gli elementi rimanenti da recuperare non riescono.

In realtà, per calcolare il conteggio degli articoli rimanenti, sottraggo dal conteggio totale degli articoli nella raccolta, indice corrente + 1 (l'indice è basato su zero), che non funziona in tutte le condizioni.

Hai un'idea su come calcolare i giusti fattori? Grazie mille!

È stato utile?

Soluzione 3

Grazie per le risposte, ma ho trovato la soluzione, che non era così ovvia né così semplice:

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)

Cheers! :)

Altri suggerimenti

Credo che dovresti fare qualcosa del tipo:

items_to_fetch = min( current_index + fetch_size, total_count )

Che ne dici di:

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

Assicurati inoltre di ottenere il conteggio totale corrente al momento dell'esecuzione, non un valore memorizzato nella cache.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top