Как я могу различить список сложных объектов в DART - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть один список сложных объектов. Как я могу отличить список, используя их идентификаторы?

Я не могу использовать toSet и подобные, потому что хеш-код от объектов отличается.

1 Ответ

0 голосов
/ 22 февраля 2020

1) Vanilla Dart

L oop по списку, добавление идентификаторов в набор как go. Всякий раз, когда вы добавляете идентификатор в набор, который еще не существует, добавляйте этот элемент в новый список различных значений.

void main() {
  var list = [
    Data('a'),
    Data('a'),
    Data('b'),
    Data('c'),
  ];

  var idSet = <String>{};
  var distinct = <Data>[];
  for (var d in list) {
    if (idSet.add(d.id)) {
      distinct.add(d);
    }
  }
}

class Data {
  Data(this.id);
  final String id;
}

2) Пакеты

Существует несколько пакетов, которые по умолчанию расширяют служебные методы Iterable, такие как flinq или darq . Они добавляют distinct метод, который вы можете вызвать, чтобы легко получить список уникальных членов списка, основанный на некотором свойстве членов.

import 'package:darq/darq.dart`;

void main() {
  var list = [
    Data('a'),
    Data('a'),
    Data('b'),
    Data('c'),
  ];
  var distinct = list.distinct((d) => d.id).toList();
}

(Отказ от ответственности, я поддерживаю darq .)

...