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?

È stato utile?

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

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