两个数组与三个 for 循环的比较
Two arrays comparison with three for loops
我的标题不是最好的,但我没有任何其他想法。我有一个 List
的 object 具有 List
类别参数和一个 String
。字符串类似于:"action,azione adventure,avventura horror sport "
。我必须用空格将其拆分以获得字符串数组,例如:["action,azione", "adventure,avventura", "horror", "sport"]
。
如果他的列表类别项目不包含在字符串数组中,我必须从 objects 的列表中删除一个项目。
我知道这听起来很棘手,所以我举个例子:
数组:["action,azione", "adventure,avventura", "horror", "sport"]
列表类别(实际列表 object):["action", "adventure", "horror", "comic", "sport"]
remain
数组:["action,azione", "adventure,avventura", "horror", "sport"]
列表类别(实际列表 object):["azione", "horror", "comico", "sport"]
删除,因为没有冒险类别
这是我的尝试:
listaManga.getManga()
是 objects
的列表
listaManga.getManga().get(index).getC()
是 object
的类别列表
String[] categories
是按空格拆分的字符串
String[] categories = MainActivity.categories.split(" ");
for (int i = 0; i < listaManga.getManga().size(); i++) {
for (int j = 0; j < categories.length; j++) {
for (int z = 0; z < listaManga.getManga().get(i).getC().size(); z++) {
if (!categories[j].contains(String.valueOf(listaManga.getManga().get(i).getC().get(z)))) {
listaManga.getManga().remove(i);
break;
}
}
}
}
它在 j
值上抛出 IndexOutOfBoundsException
。
看看以下是否有效。
String[] categories = MainActivity.categories.split(" ");
boolean found = false;
for (int i = (listaManga.getManga().size() - 1); i >= 0; i--) {
found = false;
for (int j = (categories.length - 1); j >= 0; j--) {
for (int z = (listaManga.getManga().get(i).getC().size() - 1); z >= 0; z--) {
if (!categories[j].contains(String.valueOf(listaManga.getManga().get(i).getC().get(z)))) {
listaManga.getManga().remove(i);
// Either do this
// i = i - 1;
// or put a flag here that is
// found == true;
break;
}
//if(found == true){
// break;
//}
}
}
}
我终于按照逆循环的思路解决了它,但我不得不更改 muasif80 的代码,导致他的代码出现问题:
只有在 listaManga.getManga().get(i).getC()
中没有更多类别时,它才能获得正确的类别。我举个例子:如果我有 ["comic", "adventure"]
作为 String[] categories
,它将找到所有具有 ["comic", "adventure"]
类别的列表项,但不会找到具有更多其他类别的项目,例如:["comic", "adventure", "horror"]
.
我设置了一个新字符串来检查所有可能性:
String is_contained = "";
String[] categories = MainActivity.categories.split(" ");
for (int i = (listaManga.getManga().size() - 1); i >= 0; i--) {
if(listaManga.getManga().get(i).getC().size()==0){
listaManga.getManga().remove(i);
} else {
for (int j = (categories.length - 1); j >= 0; j--) {
is_contained = "";
for (int z = (listaManga.getManga().get(i).getC().size() - 1); z >= 0; z--) {
if (!categories[j].toLowerCase().contains((String.valueOf(listaManga.getManga().get(i).getC().get(z))).toLowerCase())) {
is_contained += "a";
} else {
is_contained += "b";
}
}
if (!is_contained.toLowerCase().contains(("b").toLowerCase())) {
listaManga.getManga().remove(i);
break;
}
}
}
}
P.s。另外,如果这是最正确的答案,我会接受 muasif80 一直以来他在聊天中献给我的答案!
我的标题不是最好的,但我没有任何其他想法。我有一个 List
的 object 具有 List
类别参数和一个 String
。字符串类似于:"action,azione adventure,avventura horror sport "
。我必须用空格将其拆分以获得字符串数组,例如:["action,azione", "adventure,avventura", "horror", "sport"]
。
如果他的列表类别项目不包含在字符串数组中,我必须从 objects 的列表中删除一个项目。
我知道这听起来很棘手,所以我举个例子:
数组:["action,azione", "adventure,avventura", "horror", "sport"]
列表类别(实际列表 object):["action", "adventure", "horror", "comic", "sport"]
remain
数组:["action,azione", "adventure,avventura", "horror", "sport"]
列表类别(实际列表 object):["azione", "horror", "comico", "sport"]
删除,因为没有冒险类别
这是我的尝试:
listaManga.getManga()
是 objects
listaManga.getManga().get(index).getC()
是 object
String[] categories
是按空格拆分的字符串
String[] categories = MainActivity.categories.split(" ");
for (int i = 0; i < listaManga.getManga().size(); i++) {
for (int j = 0; j < categories.length; j++) {
for (int z = 0; z < listaManga.getManga().get(i).getC().size(); z++) {
if (!categories[j].contains(String.valueOf(listaManga.getManga().get(i).getC().get(z)))) {
listaManga.getManga().remove(i);
break;
}
}
}
}
它在 j
值上抛出 IndexOutOfBoundsException
。
看看以下是否有效。
String[] categories = MainActivity.categories.split(" ");
boolean found = false;
for (int i = (listaManga.getManga().size() - 1); i >= 0; i--) {
found = false;
for (int j = (categories.length - 1); j >= 0; j--) {
for (int z = (listaManga.getManga().get(i).getC().size() - 1); z >= 0; z--) {
if (!categories[j].contains(String.valueOf(listaManga.getManga().get(i).getC().get(z)))) {
listaManga.getManga().remove(i);
// Either do this
// i = i - 1;
// or put a flag here that is
// found == true;
break;
}
//if(found == true){
// break;
//}
}
}
}
我终于按照逆循环的思路解决了它,但我不得不更改 muasif80 的代码,导致他的代码出现问题:
只有在 listaManga.getManga().get(i).getC()
中没有更多类别时,它才能获得正确的类别。我举个例子:如果我有 ["comic", "adventure"]
作为 String[] categories
,它将找到所有具有 ["comic", "adventure"]
类别的列表项,但不会找到具有更多其他类别的项目,例如:["comic", "adventure", "horror"]
.
我设置了一个新字符串来检查所有可能性:
String is_contained = "";
String[] categories = MainActivity.categories.split(" ");
for (int i = (listaManga.getManga().size() - 1); i >= 0; i--) {
if(listaManga.getManga().get(i).getC().size()==0){
listaManga.getManga().remove(i);
} else {
for (int j = (categories.length - 1); j >= 0; j--) {
is_contained = "";
for (int z = (listaManga.getManga().get(i).getC().size() - 1); z >= 0; z--) {
if (!categories[j].toLowerCase().contains((String.valueOf(listaManga.getManga().get(i).getC().get(z))).toLowerCase())) {
is_contained += "a";
} else {
is_contained += "b";
}
}
if (!is_contained.toLowerCase().contains(("b").toLowerCase())) {
listaManga.getManga().remove(i);
break;
}
}
}
}
P.s。另外,如果这是最正确的答案,我会接受 muasif80 一直以来他在聊天中献给我的答案!