سؤال
لدي صفيف وأريد تقسيمها إلى صفحة وفقًا لحجم الصفحة المحددة مسبقًا.
هكذا أفعل:
private int CalcPagesCount()
{
int totalPage = imagesFound.Length / PageSize;
// add the last page, ugly
if (imagesFound.Length % PageSize != 0) totalPage++;
return totalPage;
}
أشعر أن الحساب ليس هو أبسط (أنا فقير في الرياضيات) ، هل يمكنك إعطاء صيغة حساب أبسط واحدة؟
المحلول
إجباره على التقريب:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
أو استخدم الرياضيات العائمة:
totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);
نصائح أخرى
في الواقع ، أنت قريب من أفضل ما يمكنك القيام به. حول الشيء الوحيد الذي يمكنني التفكير فيه قد يكون "أفضل" هو شيء من هذا القبيل:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
والسبب الوحيد الذي يجعل هذا أفضل هو أن تجنب البيان if.
ملاحظة: ستحصل دائمًا على صفحة واحدة على الأقل ، حتى بالنسبة لعدد 0 ، إذا كان حجم الصفحة> 1 ، وهو ما أحتاجه ولكن قد لا يكون ما تحتاجه. سيكون حجم صفحة 1 (سخيف ولكن صالح تقنيًا) وعدد 0 صفحات صفر. اعتمادًا على احتياجاتك ، قد ترغب في التحقق من قيمة صفر للعد وحجم الصفحة 1
int pages = ((count - 1) / PAGESIZE) + 1;
يحتوي OP على إجابة صالحة. إذا أردت أن اطفئه الترحيل ثم يمكنني ضبط PageSize = int.MaxValue
.
عدة إجابات هنا أضف إلى PageSize
(imagesFound.Length + PageSize
) وهذا من شأنه أن يسبب في تدفق. مما يؤدي بعد ذلك إلى نتيجة غير صحيحة.
هذا هو الرمز الذي سأستخدمه:
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;
لتجنب وجود أخطاء في ترقيم الصفحة بأفضل طريقة يمكنني التفكير في حساب صفحات NOOF
totalPage = Math.Ceiling(imagesFound.Length / PageSize);
هذا لا ينبغي أن يعطيك الصفحة 2 عندما pagesize == picturesfound.length