mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-01-22 16:56:19 +01:00
34 lines
979 B
Dart
34 lines
979 B
Dart
extension ListExtension<T> on List<T> {
|
|
/// Return a new list with only distinct elements
|
|
List<T> distinct() {
|
|
final s = Set();
|
|
return this.where((element) => s.add(element)).toList();
|
|
}
|
|
|
|
/// Return a new list with only distinct elements determined by [equalFn]
|
|
List<T> distinctIf(
|
|
bool Function(T a, T b) equalFn, int Function(T a) hashCodeFn) {
|
|
final s = Set<_DistinctComparator<T>>();
|
|
return this
|
|
.where((element) =>
|
|
s.add(_DistinctComparator<T>(element, equalFn, hashCodeFn)))
|
|
.toList();
|
|
}
|
|
|
|
Iterable<T> takeIndex(List<int> indexes) => indexes.map((e) => this[e]);
|
|
}
|
|
|
|
class _DistinctComparator<T> {
|
|
_DistinctComparator(this.obj, this.equalFn, this.hashCodeFn);
|
|
|
|
@override
|
|
operator ==(Object other) =>
|
|
other is _DistinctComparator<T> && equalFn(obj, other.obj);
|
|
|
|
@override
|
|
get hashCode => hashCodeFn(obj);
|
|
|
|
final T obj;
|
|
final bool Function(T, T) equalFn;
|
|
final int Function(T) hashCodeFn;
|
|
}
|