2011-08-23 14 views
10

Satır sayısını (sabit olan) bildiğim bir ızgara verildiğinde ve sütunların geçerli sayısını (isteğe göre büyüyebilir) biliyorum, bir dizinin satırını ve sütununu bu dizinden nasıl hesaplayabilirim?Çubuk pozisyonundan satır/sütun nasıl hesaplanır?

final int mRowCount = /* something */; 
int mColCount; 

Ve bazı fonksiyon verilmiş:

  + + + + + 
Cols ---> | 0 | 1 | 2 | 3 | ... 
     +--+---|---|---|---|--- 
     0 | 0 | 3 | 6 | 9 | ... 
     +--+---|---|---|---|--- 
Rows 1 | 1 | 4 | 7 | A | ... 
     +--+---|---|---|---|--- 
     2 | 2 | 5 | 8 | B | ... 
     +--+---|---|---|---|--- 
     . . . . . ... 
     . . . . . . 
     . . . . . . 

Yani

, verilen

private void func(int index) { 

    int row = index % mRowCount; 
    int col = ??? 

nasıl doğru col hesaplarım? Hem sütunların hem de satırların bir işlevi olmalı, eminim. Ama beynim benden korkuyor. Örnek: index == 4, row = 1, col = 1. index == 2 ise row = 2, col = 0.

Teşekkürler. Bir çarpma ile değiştirerek

int col = index/mRowCount; 

tek bir bölümü ile sınırlamak mümkün olacaktır (modül işlemi ortadan kaldırmak):

cevap

7

int col = index/mRowCount;

4

Sütun tamsayı bölme da elde edilebilir inanıyoruz ve çıkarma. Bunun daha az maliyetli olup olmadığından emin değilim; Muhtemelen çoğu durumda önemli olmaz:

int col = index/mRowCount; 
int row = index - col * mRowCount; 
5

index = col * mRowCount + row

sonra

row = index % mRowCount;

col = index/mRowCount;

0
column = index/max_rows; 
row = index % max_rows; 
0

satır = endeksi/numberOfColumns

ve

sütun = endeks% numberOfColumns

1

gerçekten kurulum anlıyorum ama vermedi Android GridLayout gibi ilerleyici indeksi normal ızgara var ise:

+-------------------+ 
| 0 | 1 | 2 | 3 | 4 | 
|---|---|---|---|---| 
| 5 | 6 | 7 | 8 | 9 | 
|---|---|---|---|---| 
| 10| 11| 12| 13| 14| 
|---|---|---|---|---| 
| 15| 16| 17| 18| 19| 
+-------------------+ 

hesaplama : Örneğin

int col = index % colCount; 
int row = index/colCount; 

:

012.
row of index 6 = 6/5 = 1 
column of index 12 = 12 % 5 = 2