1

我有一个用于查找值的数组。我使用前 2 个值来获取 n 行。例如,所有行在第一列有 2,在第二列有 7。 获得这些值的最快(我的意思是微优化)方法是什么? 我现在使用 for 循环来获取值:

 int l = SpreadLookupTable.GetLength(0);

 for (int iCombo = 0; iCombo < l; iCombo++) {                        
      bool o = SpreadLookupTable[iCombo, 0] == perWeek 
      && SpreadLookupTable[iCombo, 1] == workDays;

     if (o) {
         // do stuff
     }
 }

编辑: 它只有大约 60 行。如果我创建 3 个嵌套数组,那么我可以像 t[2][7] 一样直接使用前 2 列作为索引,然后我只会遍历我真正需要的行。那会更快吗?

桌子:

private static int[,] SpreadLookupTable = {
                                                  {2, 7, 1, 0, 0, 1, 0, 0, 0},
                                                  {2, 7, 1, 0, 0, 0, 1, 0, 0},
                                                  {2, 7, 0, 1, 0, 0, 1, 0, 0},                                                                                                        
                                         ...
                                                  {2, 3, 1, 1, 0, 0, 0, 0, 0},
                                                  {2, 3, 1, 0, 1, 0, 0, 0, 0},
                                                  {2, 3, 0, 1, 1, 0, 0, 0, 0}
                                                  };
4

3 回答 3

1

您可以保留与标准匹配的 iCombo 索引列表,因此在您第一次遍历所有数据之后,所有后续时间,您只需遍历索引并跳过比较。

于 2010-08-05T14:30:58.353 回答
1

如果表是静态的并且搜索值的组合是已知的,您可以将两个搜索搜索值组合成一个散列,并使用带有列表的字典将该散列映射到表中。

如果搜索值未知,您可以构建一个多级字典(或多个字典)并使用相同的技术。

(我与 Neil N 和您的编辑交叉发布,但这基本上是相同一般思想的一个版本:将索引预处理为某种查找结构。字典或列表是否更有效取决于您的特征数据。)

于 2010-08-05T14:34:00.940 回答
1

我在一个同事正在做的一个项目中看到的一个例子是他采用多列网格视图并将单元格导出到数组集。一个新数组用于索引带有“A”的行,另一个新数组用于索引带有“B”的行。然后创建以下数组来索引 Array1 和 Array 2 中的索引位置匹配的那些。使用它,您可以对这些行进行微管理以在您的

 if (o) {
         // do stuff
    }

循环,因此需要处理所有行,因为它们似乎满足设置的条件

     bool o = SpreadLookupTable[iCombo, 0] == perWeek 
  && SpreadLookupTable[iCombo, 1] == workDays;

在我们的测试中,它将应用程序完成的工作时间减少了大约 13%,虽然不多,但我们有几千行要处理,因此 60 行可能会比您的较小索引大小显示出更好的改进。

于 2010-08-05T14:44:30.187 回答