Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算偏移量的更简洁的方法是什么?_C#_Arrays_Algorithm_Refactoring - Fatal编程技术网

C# 计算偏移量的更简洁的方法是什么?

C# 计算偏移量的更简洁的方法是什么?,c#,arrays,algorithm,refactoring,C#,Arrays,Algorithm,Refactoring,此代码: private int GetColumnToPopulate(int columnBase, int offset) { int duckbillColNum = 0; switch (columnBase) { case 0: duckbillColNum = 1; break; case 1: duckbillColNum = 5; br

此代码:

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

…或者是一个多维整数数组?无论如何,“IndexOf”业务当然不符合[ile,ute]。

在我看来,您应该用以下表达式替换开关
duckbillColNum=columnBase*4+1不是吗?

这只是一个简单的数学模式:

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

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

考虑使用
字典
,您可以这样定义它:

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

摆脱Colbase,一切都好你试过什么?你试过你的两个想法吗?这似乎不是一个经过充分研究的问题。它给我的印象是
columnBase*4+1
。。。当然,如果你觉得足够的话。
return offsets[columnBase];