当前位置: 首页 > 知识库问答 >
问题:

降低六向笛卡尔积的认知复杂度

杭昊空
2023-03-14

我有一段认知复杂度为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);
                   }
               }
            }
        }
    }
}

我知道这可能是个人观点,但我正在寻找真正的解决方案或答案,从那些以前有过类似情况的人那里。

编辑:我无法从我正在工作的开发机器上访问许多库和包。我可以访问一些(太多了,无法列出),所以请注意这一点,然后建议使用一个。

共有1个答案

刁越
2023-03-14

您可以采用递归解决方案。可以说,它的可读性较低,但嵌套级别要小得多,这降低了复杂性度量:

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]
);
 类似资料:
  • 问题内容: 我有两个pandas数据框: 获得其笛卡尔积的最佳实践是什么(当然不用像我这样明确地编写它)? 问题答案: 如果每行都有一个重复的键,则可以使用merge生成笛卡尔乘积(就像在SQL中一样)。 输出:

  • 问题内容: 在Tensorflow中有什么简单的方法可以像itertools.product一样做笛卡尔积吗?我想获得两个张量(和)的元素组合,在Python中可以通过itertools作为。我正在Tensorflow中寻找替代方案。 问题答案: 我将在此假定和均为一维张量。 为了得到两者的笛卡尔积,我会用的组合和: 您使用LEN(一) LEN(B) 2张量,其中的元件的每个组合结束并且在最后一维

  • 问题内容: 我对SQL还是很陌生,并且正在为查询而苦苦挣扎(使用Access,FWIW)。我已经搜索并搜索了StackOverflow,但没有看到这种确切的情况。(这也可能是因为我不知道正确的搜索词。) 我有两个非常简单的表,其中包含相似的数据。 我想要的是在两个表以及该人所在的每个表的网络中找到匹配的每个人/州组合: 此人在每个表中可能位于多个网络中。我想查看此人所属的每个网络(从两个表中)。

  • 我有如下地图: 我想得到如下数据: 我尝试了如下: 但这不是我想要的代码,因为地图数据是动态的和不可预知的。 所以我应该像下面这样得到地图数据,但不能像我想要的那样:

  • 我在重构这部分代码时遇到了问题。如何降低该代码的认知复杂性

  • 问题内容: 我正在尝试编写一些代码来测试一堆输入参数的笛卡尔积。 我看过了,但是它的功能并不是我想要的。有没有一种简单明了的方法来获取一个字典,每个字典中包含任意数量的键 和 每个值中任意数量的元素,然后生成具有下一个排列的字典? 输入: 输出示例: 问题答案: 好的,感谢@dfan告诉我我在错误的位置查看。我现在知道了: 编辑 :经过多年的Python经验,我认为一个更好的解决方案是接受输入,而