differenceBy<T, K> function

List<T> differenceBy<T, K>(
  1. Iterable<T>? list, [
  2. Iterable<T>? values,
  3. K call(
    1. T
    )?
])

Implementation

List<T> differenceBy<T, K>(Iterable<T>? list, [Iterable<T>? values, K Function(T)? call]) {
  if (list == null) {
    return [];
  }
  if (values == null || call == null) {
    return [...list];
  }
  Set<K> set = {};
  for (var v in values) {
    set.add(call.call(v));
  }
  List<T> rl = [];
  for (var v in list) {
    if (!set.contains(call.call(v))) {
      rl.add(v);
    }
  }
  return rl;
}