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