#dart #flutter
#dart #колебание
Вопрос:
Я хочу удалить совпадающий элемент в массиве и создать отдельный массив
var arr = [
{"name": "Peter"},
{"name": "Hana"},
{"name": "Jone"},
{"name": "Peter"},
{"name": "Peter"},
];
Результат:
var arr = [
{"name": "Peter"},
{"name": "Hana"},
{"name": "Jone"},
];
Ответ №1:
Вот так:
arr = arr.asMap().map((i, m)=> MapEntry<String, Map>(m["name"], m)).values.toList()
Комментарии:
1. Приветствую вас. Отметьте ответ как правильный, если это сработало для вас
Ответ №2:
arr = arr.toSet().toList()
проверьте toSet()
документы
Комментарии:
1. Я последовал, но результат по-прежнему не меняется
2. не могли бы вы попробовать напечатать просто ` arr.toSet().ToList()`
Ответ №3:
Вы можете создать свой собственный класс для анализа данных, затем вы можете сравнить объекты и отфильтровать свой список.
Ваш класс Person
class Person {
final String name;
Person({this.name});
factory Person.from(dynamic json) => Person(name: json["name"]);
Map<String, dynamic> toJson() => {"name": name};
@override
bool operator ==(Object other) =>
identical(this, other) || other is Person amp;amp; name == other.name;
String toString() => "name : $name";
}
Использование
var arr = [
{"name": "Peter"},
{"name": "Hana"},
{"name": "Jone"},
{"name": "Peter"},
{"name": "Peter"},
];
final objectList = arr.map((json) => Person.from(json)).toList();
var filteredList = [];
objectList.forEach(
(item) {
if (!(filteredList.contains(item))) {
filteredList.add(item);
}
},
);
print(filteredList);
Комментарии:
1. вы можете пометить ответ как решаемый, если это вам поможет 🙂
2. Если вы переопределяете
==
, вы также должны переопределитьhashCode
, иначе наборы не будут работать. Любые два объекта, которые «равны», также должны иметь одинаковый хэш-код. Обратное не обязательно верно. Смотрите api.dartlang.org/stable/2.2.0/dart-core/Object/hashCode.html .