-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」ビジネスはコンパイルしません。

4

4 に答える 4

5

どうですか:

private int GetColumnToPopulate(int columnBase, int offset) {
   return (columnBase * 4) + 1 + offset;
}
于 2012-10-11T19:04:13.183 に答える
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];
于 2012-10-11T19:07:25.863 に答える
1

スイッチをこの式に置き換えるべきだと私にduckbillColNum = columnBase*4 +1;は思えますね。

于 2012-10-11T19:04:05.583 に答える
1

これは単純な数学的パターンです。

private int GetColumnToPopulate(int columnBase, int offset) 
{ return 1 + (columnBase * 4) + offset; }
于 2012-10-11T19:04:08.297 に答える