xorBy<T, K> function

List<T> xorBy<T, K>(
  1. Iterable<Iterable<T>> list,
  2. K convert(
    1. T
    )
)

Implementation

List<T> xorBy<T, K>(Iterable<Iterable<T>> list, K Function(T) convert) {
  List<T> rl = [];
  List<T> cl = concat2<T>(list);
  Map<K?, int> map = {};
  for (var e in cl) {
    var k = convert.call(e);
    if (map.containsKey(k)) {
      map[k] = map[e]! + 1;
    } else {
      map[k] = 1;
    }
  }

  for (var e in cl) {
    var k = convert.call(e);
    var c = map[k] ?? 0;
    if (c <= 0) {
      rl.add(e);
    }
  }
  return rl;
}