gpt4 book ai didi

java - 如何以笛卡尔方式迭代字符串列表?

转载 作者:行者123 更新时间:2023-12-02 10:04:22 26 4
gpt4 key购买 nike

我有一个字符串,每个元素被分成 5 个字符:

ss="A4A12B2B16A1B01A1B23S1B32A1A32B1B44B2A44A4C16A3D15A4D01A5D23A4E20B1F24A2F17A1F01B0G16A5C34A4C43A5C53A3D50A4D61S4E50A0F51A1F67S2E46B1E31A1F30A2G36A1G41B1G52";

List<String> parts = new ArrayList<>();
int len = ss.length();
int partitionSize=5;
for (int i = 0; i < len; i += partitionSize) {
parts.add(ss.substring(i, Math.min(len, i + partitionSize)));
}
System.out.println(parts)

代码将打印出如下内容:

[A4A12, B2B16, A1B01, A1B23, S1B32, A1A32, B1B44, B2A44, A4C16, A3D15, A4D01, A5D23, A4E20, B1F24, A2F17, A1F01, B0G16, A5C34, A4C43, A5C53, A3D50, A4D61, S4E50, A0F51, A1F67, S2E46, B1E31, A1F30, A2G36, A1G41, B1G52]

我有一个 foo 函数,只接受两个字符串输入。对于每个i,数组将从[A4A12,B2B16]增加到[A4A12,B2B16,A1B01]再到[A4A12,B2B16,A1B01,A1B23]等等,直到列表耗尽......

当 i==0 时,我希望函数计算 foo(A4A12,B2B16)

当 i==1 时,我希望函数先计算 foo(A4A12,B2B16),然后计算 foo(B2B16,A1B01)

当 i==3 时,我希望函数先评估 foo(A4A12,B2B16),然后评估 foo(A4A12,A1B01),然后评估 foo(A4A12,A1B23),然后评估 foo(B2B16,A1B01),然后评估 foo(B2B16, A1B23),然后是 foo(A1B01,A1B23)。

这是我迄今为止尝试过的

List<List> parts1 = new ArrayList<>();
for (int i=0;i<set.size();i++){
parts1.add(parts.subList(0,i+1));//increase the size of the array for every iteration
for (int j=0;j<parts1.size();i++){//how to loop this in a Cartesian way??
if(foo(parts.get(j), parts.get(j+1))){
return true;}

当然,循环不会以详尽/笛卡尔的方式迭代,不是吗?有办法做到吗?

最佳答案

如果你想以笛卡尔方式迭代,你可以这样做:

String ss = "A4A12B2B16A1B01A1B23";
List<String> parts = new ArrayList<>();
int len = ss.length();
int partitionSize=5;
for (int i=0; i<len; i+=partitionSize)
parts.add(ss.substring(i, Math.min(len, i + partitionSize)));

for (int i=1; i<parts.size(); i++) {
List<String> pairs = new LinkedList<>();
for (int j=0;j<=i;j++)
pairs.add(parts.get(j));
while(!pairs.isEmpty()) {
String cur1 = pairs.get(0);
Iterator<String> it2 = pairs.iterator();
it2.next(); //discard first element which of course exists
while(it2.hasNext()) {
String cur2 = it2.next();
if(foo(cur1, cur2)) {
//...
}
}
pairs.remove(0);
}
//end processing of the i-th cartesian product
}

请注意,如果您希望第 i 个笛卡尔积,所有对都必须为 foo 调用返回 true,那么您必须使用初始化为 true 的 boolean 变量,如果为 true,则存在一对这样,对于这一对, foo 函数返回 false,然后将该 boolean 变量设置为 false。在第 i 个笛卡尔积处理结束时,您可以检查该 boolean 变量。

关于java - 如何以笛卡尔方式迭代字符串列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55410397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com