This is pretty easy to implement on your own:
Iterable distinct(Iterable i) {
var set = new Set();
return i.where((e) {
var isNew = !set.contains(e);
set.add(e);
return isNew;
});
It would be even nicer if I Set.add()returned a bool that indicated whether the set was changed:
Iterable distinct(Iterable i) {
var set = new Set();
return i.where((e) => set.add(e));
}
You can, of course, record errors in queries.
: , , Iterable . Iterator , .
, Iterator, Iterable, Iterable. , Iterable Iterator, , WhereIterable/WhereIterator:
Iterable distinct(Iterable i) => new DistinctIterable(i);
class DistinctIterable<E> extends Iterable<E> {
final Iterable<E> _iterable;
DistinctIterable(this._iterable);
Iterator<E> get iterator {
return new DistinctIterator<E>(_iterable.iterator);
}
}
class DistinctIterator<E> extends Iterator<E> {
final Iterator<E> _iterator;
final Set<E> _visited = new Set<E>();
DistinctIterator(this._iterator);
bool moveNext() {
while (_iterator.moveNext()) {
if (!_visited.contains(_iterator.current)) {
_visited.add(_iterator.current);
return true;
}
}
return false;
}
E get current => _iterator.current;
}
, , Iterable Iterable s. , , lib - , .