将项目分成不同的数组
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 循环索引,所以上述方法似乎是最简洁的方法。
我有以下形式的代码
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 循环索引,所以上述方法似乎是最简洁的方法。