Pergunta

Eu tenho uma matriz e quero dividi -los em página de acordo com o tamanho da página predefinida.

É assim que eu faço:

private int CalcPagesCount()
{
    int  totalPage = imagesFound.Length / PageSize;

    // add the last page, ugly
    if (imagesFound.Length % PageSize != 0) totalPage++;
    return totalPage;
}

Eu sinto que o cálculo não é o mais simples (sou pobre em matemática), você pode fornecer uma fórmula de cálculo mais simples?

Foi útil?

Solução

Forçar -o a arredondar:

totalPage = (imagesFound.Length + PageSize - 1) / PageSize;

Ou use matemática de ponto flutuante:

totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);

Outras dicas

Na verdade, você está próximo do melhor que pode fazer. Sobre a única coisa que consigo pensar que pode ser "melhor" é algo assim:

totalPage = (imagesFound.Length + PageSize - 1) / PageSize;

E a única razão pela qual isso é melhor é que você evita a instrução IF.

Nota: você sempre receberá pelo menos 1 página, mesmo para 0 contagem, se o tamanho da página for> 1, que é o que eu precisava, mas pode não ser o que você precisa. Um tamanho de página de 1 (bobo, mas tecnicamente válido) e uma contagem de 0 seriam zero páginas. Dependendo das suas necessidades, você pode verificar um valor zero para contagem e tamanho da página de 1

int pages = ((count - 1) / PAGESIZE) + 1;

O OP contém uma resposta válida. Se eu quisesse desligar Paging então eu poderia definir PageSize = int.MaxValue.

Várias respostas aqui adicionam a PageSize (imagesFound.Length + PageSize) e isso causaria um transbordamento. O que leva a um resultado incorreto.

Este é o código que vou usar:

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;

Para evitar ter erros com a página numerando a melhor maneira de pensar em calcular ninguém é fazendo a seguinte linha

totalPage = Math.Ceiling(imagesFound.Length / PageSize);

Isso não deve lhe dar a página 2 quando Pagesize == Imagesfound.length

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top