Удалить элемент, совпадающий в массиве «distinct»

#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 .