我有两个列表,lst1和lst2. 我想执行lst1 - lst2,它返回lst1not in 的所有元素lst2。
var lst1 = ["t1" , "t2" , "t3" , "t4"];
var lst2 = ["t2" , "t4" , "t5"];
//output: ["t1" , "t3"]
Run Code Online (Sandbox Code Playgroud)
小智 8
Ray Toal建议的使用集合的方法可能是最快的,但如果您的第一个列表包含要保留的重复项,集合将完全销毁它们。
相反,您可以使用简单的列表过滤方法。
void main() {
var lst1 = ["t1" , "t2" , "t2", "t3" , "t3", "t4"]; // introduce duplicates
var lst2 = ["t2" , "t4" , "t5"];
var set1 = Set.from(lst1);
var set2 = Set.from(lst2);
print(List.from(set1.difference(set2)));
// Output : [t1, t3]
var filtered_lst = List.from(lst1.where(
(value) => !lst2.contains(value)));
print(filtered_lst);
// Output: [t1, t3, t3]
}
Run Code Online (Sandbox Code Playgroud)
如果两个列表中都有重复项,并且您实际上想要减去每个项目的列表项,则可以使用该remove方法(警告:这实际上会从第一个列表中删除项目,因此您可能需要先创建一个副本)。
void main() {
var lst1 = ["t1" , "t2" , "t2", "t3" , "t3", "t4"]; // introduce duplicates
var lst2 = ["t2" , "t4" , "t5"];
for (var elem in lst2) {
lst1.remove(elem);
}
print(lst1);
// Output : [t1, t2, t3, t3]
// only one occurrence of "t2" was removed.
}
Run Code Online (Sandbox Code Playgroud)
Convert to sets and take the difference, then convert back to a list (with the caveat that neither duplicates nor the ordering of elements will be preserved):
void main() {
var lst1 = ["t1" , "t2" , "t3" , "t4"];
var lst2 = ["t2" , "t4" , "t5"];
var set1 = Set.from(lst1);
var set2 = Set.from(lst2);
print(List.from(set1.difference(set2)));
}
Run Code Online (Sandbox Code Playgroud)
Output
[t1, t3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1484 次 |
| 最近记录: |