【问题标题】:Number of Items in a Column inside a grid网格内一列中的项目数
【发布时间】:2010-09-14 03:58:04
【问题描述】:

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

我有一个网格(具体来说是列表视图控件),并且有一些项目。 有时,给定的行可能未满。 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 个变量进行跟踪?

【问题讨论】:

    标签: c++ visual-c++ logic


    【解决方案1】:

    假设从 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 是整数除法。

    【讨论】:

    • 感谢您的回答。对于给出的示例,itemCount=6,columnCount=2 对吗?使用 inputColumn=0 的公式:lastItemColumn=0,返回值 3,这是正确的。但是对于 inputColumn=1 或 2:lastItemColumn=0,返回值仍然是 3,这是不正确的。我在遵循您的逻辑时是否遗漏了什么?
    • 不,你的例子是:itemsInColumn(7, 3, 0), itemsInColumn(7, 3, 1) 和 itemInColumn(7, 3, 2),结果是 3, 2 和 2 ,分别。
    • columnCount 是列数。输入中唯一从 0 开始的索引是 inputColumn,其前提是:0
    • 是的.. 明白了.. 我对所有这些都是从零开始的感到困惑
    猜你喜欢
    • 1970-01-01
    • 2012-06-29
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 2016-03-29
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多