删除项目重合数组“distinct”

问题描述 投票:3回答:4

我想删除数组中的项重合并生成不同的数组

var arr = [
  {"name": "Peter"},
  {"name": "Hana"},
  {"name": "Jone"},
  {"name": "Peter"},
  {"name": "Peter"},
];

结果:

var arr = [
  {"name": "Peter"},
  {"name": "Hana"},
  {"name": "Jone"},
];
dart flutter
4个回答
1
投票

干得好:

arr = arr.asMap().map((i, m)=> MapEntry<String, Map>(m["name"], m)).values.toList()

0
投票
arr = arr.toSet().toList() 

检查toSet() docs


0
投票

您可以创建自己的类来解析数据,然后可以比较对象并过滤列表。

你的人类

    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 && 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);

0
投票
import 'package:queries/collections.dart';

void main() {
  var query = Collection(arr).distinct(CustomEqualityComparer(
      (a, b) => a['name'] == b['name'], (a) => a.length));
  print(query.toList());
}

var arr = [
  {"name": "Peter"},
  {"name": "Hana"},
  {"name": "Jone"},
  {"name": "Peter"},
  {"name": "Peter"},
];

结果:

[{name: Peter}, {name: Hana}, {name: Jone}]

© www.soinside.com 2019 - 2024. All rights reserved.