La formula più semplice per calcolare il conteggio delle pagine?
-
05-07-2019 - |
Domanda
Ho un array e voglio dividerli in pagina in base alle dimensioni della pagina preimpostate.
Ecco come faccio:
private int CalcPagesCount()
{
int totalPage = imagesFound.Length / PageSize;
// add the last page, ugly
if (imagesFound.Length % PageSize != 0) totalPage++;
return totalPage;
}
Sento che il calcolo non è il più semplice (sono povero in matematica), puoi dare una formula di calcolo più semplice?
Soluzione
Forza l'arrotondamento:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
Oppure usa la matematica in virgola mobile:
totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);
Altri suggerimenti
In realtà, sei vicino al meglio che puoi fare. L'unica cosa che mi viene in mente potrebbe essere "migliore" è qualcosa del genere:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
E l'unica ragione per cui questo è meglio è che eviti l'istruzione if.
NOTA: otterrai sempre almeno 1 pagina, anche per 0 conteggi, se la dimensione della pagina è > 1, che è quello di cui avevo bisogno, ma potrebbe non essere quello di cui hai bisogno. Una dimensione di pagina di 1 (sciocca ma tecnicamente valida) e un conteggio di 0 sarebbe zero pagine. A seconda delle tue esigenze potresti voler controllare un valore zero per count & amp; dimensione della pagina di 1
int pages = ((count - 1) / PAGESIZE) + 1;
L'OP contiene una risposta valida. Se volessi disattivare il paging, allora potrei impostare PageSize = int.MaxValue
.
Diverse risposte qui si aggiungono a PageSize
( imagesFound.Length + PageSize
) e ciò causerebbe un overflow. Il che porta quindi a un risultato errato.
Questo è il codice che sto per usare:
int imageCount = imagesFound.Length;
// include this if when you always want at least 1 page
if (imageCount == 0)
{
return 1;
}
return imageCount % PageSize != 0
? imageCount / PageSize + 1
: imageCount / PageSize;
Per evitare errori con la numerazione delle pagine, il modo migliore in cui posso pensare di calcolare noOfPages è fare la seguente riga
totalPage = Math.Ceiling(imagesFound.Length / PageSize);
Questo non dovrebbe darti la pagina 2 quando PageSize == imagesFound.Length