所以,我在switch语句中有一段代码,它几乎完全在每个case部分重复。对于第一种情况的代码看起来像如下:我该如何重用一个for循环,其中每次对数组的索引都是不同的
// Some working arrays being defined in each case
countArr = createArrWithZeroes(height);
processArr = createEmpty2DArr(width, height);
for (j = 0; j < height; j++) {
for (k = 0; k < width; k++) {
item = arr[j][k];
if (item !== null) {
// Accessing the working arrays, note the indexing
processArr[j][countArr[j]] = item;
countArr[j]++;
}
}
}
而且在未来的情况下,我有:
countArr = createArrWithZeroes(width);
processArr = createEmpty2DArr(width, height);
for (j = 0; j < height; j++) {
for (k = 0; k < width; k++) {
item = arr[j][k];
if (item !== null) {
processArr[countArr[k]][k] = item;
countArr[k]++;
}
}
}
等等,每个情况下,具有不同的索引两大内线被用于循环。请注意,countArr在两者之间的定义也不相同。
我觉得这个代码块可以被抽象,以便它可以被重用,但我不知道该怎么做。我可以在for块中移动switch语句,但问题是countArr数组也需要针对每种情况进行不同的定义。那么我最终会得到两个switch语句,其中一个是for循环中的两个(看起来不太好)。有没有办法用高阶函数解决这个问题?
请标记语言 – Carcigenicate
这是一个开关的情况下,只有2个选项? – SDhaliwal
不,有4个选项。 countArr数组交替如何初始化(使用宽度或高度),但索引因每种情况而不同。在第三和第四种情况下,我在索引中做了一些基本的算术。 – CJNaude