I have an array that i use to lookup values. I use the first 2 values to get n rows.
for example all rows that have 2 in the first column and 7 in the second.
What is the fastest (i mean micro-optimized) way to get these values?
I now use a for loop to get the values:
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
}
}
Edit:
It only has some 60 rows. What if i make 3 nested arrays so i could use the first 2 columns as an index directly like t[2][7] and then i would only iterate over the rows i really need. would that be faster?
the table:
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}
};
If the table is static and the combination of search values is known, you could combine both search search values into a hash and map that hash into the table using a dictionary with a list.
If the search values are not known, you could build a multi-level dictionary (or dictionaries) and use the same technique.
(I cross-posted with Neil N and your edit, but this is basically a version of the same general idea: pre-process the indices into some kind of lookup structure. Whether a dictionary or list is more efficient depends on the characteristics of your data.)