2010-09-14 11 views
1

Comment trouvez-vous le nombre d'éléments dans une colonne dans une grille?Nombre d'éléments dans une colonne à l'intérieur d'une grille

J'ai une grille (contrôle listview pour être spécifique), et j'ai quelques éléments. Parfois, une ligne donnée peut ne pas être pleine. ANd peut avoir des valeurs inférieures à des colonnes maximales. J'ai besoin de trouver le nombre d'éléments dans une colonne donnée.

Si la grille est comme

1 2 3 
4 5 6 
7  

et si la colonne d'entrée est 1, alors nous avons besoin à la sortie 3 et 2 pour l'entrée de 2 ou 3.

J'ai des variables à des ItemCount, CoulmnCount et RowCount qui suivent le nombre d'éléments, de lignes et de colonnes.

Une façon très rudimentar serait quelque chose comme ceci:

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++; 

Pouvez-vous les gars penser à quelque façon que ce sophesticated, qui n'a pas besoin de boucles? possible en utilisant seulement 3 variables que j'ai déjà pour le suivi?

Répondre

1

En supposant que les indices de base 0:

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

Cela dépend du nombre total d'articles (itemCount) et le nombre de colonnes (columnCount). Il calcule simplement itemCount/columnCount et arrondit à la valeur supérieure ou inférieure selon que la colonne d'entrée est inférieure ou égale à la colonne du dernier élément.

Le calcul "(itemCount + columnCount - 1)/columnCount" est juste une astuce pour arrondir en utilisant la division entière. En général, on donne des entiers positifs a et b: ceil (a/b) = (a + b - 1) div b, où div est une division entière.

+0

Merci pour la réponse. Pour l'exemple donné, itemCount = 6, columnCount = 2 right? Avec votre formule pour inputColumn = 0: lastItemColumn = 0, renvoie la valeur 3, ce qui est correct. Mais pour inputColumn = 1 ou 2: lastItemColumn = 0, la valeur de retour est toujours 3, ce qui est incorrect. Est-ce que je manque quelque chose en suivant votre logique? – Adarsha

+0

Non, vos exemples seraient: itemsInColumn (7, 3, 0), itemsInColumn (7, 3, 1) et itemInColumn (7, 3, 2), qui aboutissent respectivement à 3, 2 et 2. –

+0

columnCount est le nombre de colonnes. Le seul index basé sur 0 dans l'entrée est inputColumn, dont la condition préalable est: 0 <= inputColumn