将项目分成不同的数组

Separate items into different arrays

我有以下形式的代码

for each item x in array
    if x in areaA
        put x in aArray
    if x in areaB
        put x in bArray
    if x in areaC
        put x in cArray

    if x in area1
        put x in 1Array
    if x in area2
        put x in 2Array
    if x in area3
        put x in 3Array
    ...
    if x in area20
        put x in 20Array

例如,其中 x 可以同时在 A 和 3 中。检查是看物品是否在各自的区域内。

此代码有 23 个非常相似的检查和 23 行将项目添加到相关数组中,所以在我看来应该有一些明显的方法来清理它。

如何重构它以减少检查次数?

您可以创建一个以 x、a 和数组为参数的函数,检查 x 是否在 a 中,如果不在则将其放入数组中。

此外,您可以在没有外部循环的情况下循环遍历数组

我通过将要检查的区域放入数组,然后遍历每个数组来解决这个问题:

for each item in array
    for each area in areaABC
        if item in area
            put item in arrayABC[ foreach index]
            break
    for each area in area123
        if item in area
            put item in array123[ foreach index]
            break

因为我使用的特定语言具有 if-then-exitWith 结构(类似于使用 break)并且还允许您访问 foreach 循环索引,所以上述方法似乎是最简洁的方法。