如何在网格内的列中查找项目数?

我有一个网格(具体来说是listview控件),并且有一些项目。
有时给定的行可能未满。 ANd的值可以少于最大列数。我需要在给定的列中找到项目数。

如果网格像

1   2   3
4   5   6
7

如果输入列为1,则我们需要输出3,而输入2或3则需要输出2。

我有用于ItemCount,CoulmnCount和RowCount的变量,它们可以跟踪项目,行和列的数量。

一个非常基本的方法是这样的:
int iItemCount=0,iItemInColumn=0;
for(int iCol=0;iCol<iColumnCount;iCol++)
    for(int iRow=0;iRow<iRowCount;iRow++,iItemCount++)
        if(iCol==iInputCol && iItemCount<iTotalItems)
            iItemInColumn++;

你们能想到不需要循环的任何复杂方法吗?可能仅利用我已有的3个变量进行跟踪?

最佳答案

假设基于0的索引:

def itemsInColumn(itemCount, columnCount, inputColumn):
  lastItemColumn = (itemCount - 1) % columnCount
  if inputColumn <= lastItemColumn:
    return (itemCount + columnCount - 1) / columnCount
  else:
    return itemCount / columnCount

它取决于项目总数(itemCount)和列数(columnCount)。它仅计算itemCount / columnCount,并根据输入列是否小于或等于最后一个项目的列向上或向下舍入。

计算“(itemCount + columnCount-1)/ columnCount”只是使用整数除法进行四舍五入的技巧。通常,给定正整数a和b:ceil(a / b)=(a + b-1)div b,其中div是整数除法。

10-05 23:47