作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一段代码有 Cognitive Complexity共 21
for (String item1 : itemList1){
for (String item2 : itemList2){
for (String item3 : itemList3){
for (String item4 : itemList4){
for (String item5 : itemList5){
for (String item6 : itemList6){
methodToRun(item1, item2, item3, item4, item5, item6);
}
}
}
}
}
}
我们的 linter 指定最大认知复杂度为 15,因此我应该按照我们一直遵循的标准来降低它。
任何人都可以为这段代码提出替代解决方案吗?或者尽管复杂性太高,但仍然可以接受吗?
我知道这可能是个人意见,但我正在寻找真正的解决方案或以前遇到过类似情况的人的答案。
编辑:我无法从我正在使用的开发机器访问很多库和包。我可以访问一些(太多无法列出),所以在建议使用之前请注意这一点。
最佳答案
您可以寻求递归解决方案。可以说它的可读性较差,但嵌套级别要低得多,从而降低了复杂性:
static void recursiveRun(List<List<String>> list, int pos, String[] item) {
if (pos == 6) {
methodToRun(item[0], item[1], item[2], item[3], item[4], item[5]);
} else {
for (String s : list.get(pos)) {
item[pos] = s;
recursiveRun(list, pos+1, item);
}
}
}
初始调用如下所示:
recursiveRun(
Arrays.asList(itemList1, itemList2, itemList3, itemList4, itemList5, itemList6)
, 0
, new String[6]
);
关于java - 降低六向笛卡尔积的认知复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48425394/
我是一名优秀的程序员,十分优秀!