J'ai un tableau et je veux les diviser en page selon la taille de page prédéfinie.
Voici comment je fais:
private int CalcPagesCount()
{
int totalPage = imagesFound.Length / PageSize;
// add the last page, ugly
if (imagesFound.Length % PageSize != 0) totalPage++;
return totalPage;
}
Je pense que le calcul n'est pas le plus simple (je suis pauvre en mathématiques), pouvez-vous donner une formule de calcul plus simple?
Forcer à arrondir:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
Ou utilisez des mathématiques en virgule flottante:
totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);
En fait, vous êtes proche du meilleur que vous pouvez faire. La seule chose à laquelle je peux penser qui pourrait être "mieux" est quelque chose comme ceci:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
Et la seule raison pour laquelle cela est encore meilleur est que vous évitez l'instruction if.
REMARQUE: vous obtiendrez toujours au moins 1 page, même pour un nombre de 0, si la taille de la page est> 1, ce dont j'avais besoin mais peut ne pas être ce dont vous avez besoin. Une taille de page de 1 (idiot mais techniquement valide) et un compte de 0 correspondraient à zéro page. Selon vos besoins, vous voudrez peut-être vérifier une valeur nulle pour le nombre et la taille de page de 1
int pages = ((count - 1) / PAGESIZE) + 1;
L'OP contient une réponse valide. Si je voulais désactiver la pagination, je pourrais définir PageSize = int.MaxValue
.
Plusieurs réponses ici s'ajoutent à PageSize
(imagesFound.Length + PageSize
) et cela provoquerait un débordement. Ce qui conduit alors à un résultat incorrect.
Voici le code que je vais utiliser:
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;