我們有兩個清單
List<String> list1 = ['foo', 'bar', 'blah', 'bee', 'fog'];
List<String> list2 = ['bee', 'bar'];
我們想從第一個中洗掉第二個中的專案。
我們可以迭代,將第二個中的那些一一洗掉
for (var v in list2) {
list1.removeWhere((item) => item == v);
}
但這很愚蠢。這將花費與兩個串列長度的乘積成正比的時間。
我們可以轉換為集合并使用 Dart 的 Set.difference(),然后回傳一個串列。
n = (n.toSet().difference(m.toSet())).toList();
但是我們丟失了 中專案的順序list1。
在 Dart 中確定穩定串列集差的好方法是什么?
uj5u.com熱心網友回復:
一種解決方案是將其轉換list2為 aSet以使其更有效地詢問元素 fromlist1是否屬于list2. 然后我們可以使用removeWhere從 中洗掉元素list1:
void main() {
List<String> list1 = ['foo', 'bar', 'blah', 'bee', 'fog'];
List<String> list2 = ['bee', 'bar'];
list1.removeWhere(list2.toSet().contains);
print(list1); // [foo, blah, fog]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/342550.html
標籤:镖
上一篇:ProviderNotFoundException在構建ConsumptionDialog時被拋出,因為使用了不包含提供者的`BuildContext`
