【发布时间】:2020-09-26 17:48:18
【问题描述】:
我正在尝试比较两个列表,allCategories 和 selecetdCategories,如果列表中有类似的项目 selecetdCategories 和 allCategories ,我应该首先将现有的存储在列表 orderPreferences 中,然后,我附加不存在的。我实际上对 StackOverflow 上的现有问题进行了一些研究,但我无法连接这些点。
例如,每个列表都有以下项目:
allCategories :
- 农业
- 意见
- 教育
- 旅游
- 教育
- 文化
selecetdCategories :
农业
教育
旅游
那么这就是我期望在 orderPreferences 列表 项目中应该首先插入 selectedCategories 列表项目然后添加不存在的项目,例如:
农业
教育
旅游
意见
教育
文化
下面是我当前的代码:
class Model {
int id;
String name;
Model({this.name, this.id});
}
void main() {
List<Model> allCategories = List();
allCategories.add(Model(id: 1, name: 'Agriculture'));
allCategories.add(Model(id: 2, name: 'Opinions'));
allCategories.add(Model(id: 3, name: 'Education'));
allCategories.add(Model(id: 4, name: 'Tourism'));
allCategories.add(Model(id: 5, name: 'Education'));
allCategories.add(Model(id: 6, name: 'Culture'));
List<Model> selecetdCategories = List();
selecetdCategories.add(Model(id: 1, name: 'Agriculture'));
selecetdCategories.add(Model(id: 5, name: 'Education'));
selecetdCategories.add(Model(id: 4, name: 'Tourism'));
List<Model> orderPreferences = List();
for (var i = 0; i < allCategories.length; i++) {
if (allCategories.contains(Model(
id: selecetdCategories[i].id, name: selecetdCategories[i].name))) {
orderPreferences
.add(Model(id: allCategories[i].id, name: allCategories[i].name));
}
orderPreferences
.add(Model(id: allCategories[i].id, name: allCategories[i].name));
}
for (var i = 0; i < orderPreferences.length; i++) {
print(' name : ${orderPreferences[i].name}');
}
}
但是,我在运行它时遇到了异常:
Uncaught Error: RangeError (index): Index out of range: index should
be less than 3: 3
比较 dart 中的两个对象列表的解决方案是什么?
【问题讨论】:
-
如何使用地图。 allCategoriesMap 和 selecetdCategoriesMap 因为你有 id。然后迭代最小的映射并在另一个映射中查看它的值,将其存储在结果中并从两个映射中删除条目。然后,您可以将两个地图中的所有剩余部分推送到 resultList
-
@pranavprashant,我该如何删除,你谈到的,我还是很困惑:\,欢迎回答