2012-10-11 69 views
-2

此代碼:什麼是計算偏移更簡潔的方法?

private int GetColumnToPopulate(int columnBase, int offset) { 
    int duckbillColNum = 0; 
    switch (columnBase) { 
     case 0: 
      duckbillColNum = 1; 
      break; 
     case 1: 
      duckbillColNum = 5; 
      break; 
     case 2: 
      duckbillColNum = 9; 
      break; 
     case 3: 
      duckbillColNum = 13; 
      break; 
     case 4: 
      duckbillColNum = 17; 
      break; 
     case 5: 
      duckbillColNum = 21; 
      break; 
     case 6: 
      duckbillColNum = 25; 
      break; 
     case 7: 
      duckbillColNum = 29; 
      break; 
    } 
    duckbillColNum += offset; 
    return duckbillColNum; 
} 

...很容易神交,但冗長和沉悶。我想簡化它。我的僞代碼想法是這樣的:

int[] colBases 
{ 
    0..7 
} 
int[] offsets 
{ 
    1,5,9,13,17,21,25,29 
} 
int idx = colBases.IndexOf(columnBase); 
duckbillColNum = offsets[idx]; 

......或者也許是一個多維的int數組?無論如何,「IndexOf」業務當然不包括在內。

+0

擺脫'colBases',這一切都很好 –

+1

你有什麼嘗試?你有沒有嘗試過你的想法?這似乎不是一個經過深入研究的問題。 –

+0

「columnBase * 4 + 1」給我留下了深刻的印象......當然,如果它足夠適合你。 –

回答

5

如何:

private int GetColumnToPopulate(int columnBase, int offset) { 
    return (columnBase * 4) + 1 + offset; 
} 
1

在我看來,你應該用這個表達替換開關duckbillColNum = columnBase*4 +1;是不是?

1

這僅僅是一個簡單的數學模式:

private int GetColumnToPopulate(int columnBase, int offset) 
{ return 1 + (columnBase * 4) + offset; } 
2

考慮使用Dictionary,你可以這樣定義它:

Dictionary<int, int> offsets = new Dictionary<int, int>() 
    { 
     { 0, 1 }, 
     { 1, 5 }, 
     { 2, 9 }, 
     { 3, 13 }, 
     { 4, 17 }, 
     { 5, 21 }, 
     { 6, 25 }, 
     { 7, 29 }, 
    } 

然後使用時:

return offsets[columnBase]; 
相關問題