Idiom #119 Deduplicate list
Remove duplicates from the list x.
Explain if the original order is preserved.
![Turning list [b,a,b,c] into [b,a,c]](https://storage.googleapis.com/programming-idioms-pictures/idiom/119/dedupe.png)
Remove duplicates from the list x.
Explain if the original order is preserved.
std::vector<std::string> x = {"one", "two", "two", "one", "three"};
std::unordered_set<std::string> t;
for (auto e : x)
t.insert(e);
x = x.sort.uniq.array;
x = redBlackTree(x)[].array;
slices.Sort(x)
x = slices.Compact(x)
func deduplicate[S ~[]T, T comparable](x S) S {
seen := make(map[T]bool)
j := 0
for _, v := range x {
if !seen[v] {
x[j] = v
j++
seen[v] = true
}
}
var zero T
for i := j; i < len(x); i++ {
// Avoid memory leak
x[i] = zero
}
return x[:j]
}
seen := make(map[T]bool)
j := 0
for _, v := range x {
if !seen[v] {
x[j] = v
j++
seen[v] = true
}
}
x = x[:j]
seen := make(map[T]bool)
j := 0
for _, v := range x {
if !seen[v] {
x[j] = v
j++
seen[v] = true
}
}
for i := j; i < len(x); i++ {
x[i] = nil
}
x = x[:j]
y := make(map[T]struct{}, len(x))
for _, v := range x {
y[v] = struct{}{}
}
x2 := make([]T, 0, len(y))
for _, v := range x {
if _, ok := y[v]; ok {
x2 = append(x2, v)
delete(y, v)
}
}
x = x2
Set<T> uniques = new HashSet<>(x);
x.clear();
x.addAll(uniques);
final HashSet<T> seen = new HashSet<T>();
final Iterator<T> listIt = x.iterator();
while (listIt.hasNext()) {
final T curr = listIt.next();
if (seen.contains(curr)) {
listIt.remove();
} else {
seen.add(curr);
}
}
(define (remove-duplicates l)
(cond ((null? l)
'())
((member (car l) (cdr l))
(remove-duplicates (cdr l)))
(else
(cons (car l) (remove-duplicates (cdr l))))))
(remove-duplicates x)
x intersection: x asSet.
x asSet.
x = x.distinct()
x = x.toSet().toList()
(distinct x)
std::vector<std::string> x = {"one", "two", "two", "one", "three"}; std::unordered_set<std::string> t; for (auto e : x) t.insert(e);
std::sort(x.begin(), x.end()); auto last = std::unique(x.begin(), x.end()); x.erase(last, x.end());
var uniques = x.Distinct().ToList();
x = x.sort.uniq.array;
x = redBlackTree(x)[].array;
x = x.toSet().toList();
Enum.uniq(x)
S = lists:usort(X)
slices.Sort(x) x = slices.Compact(x)
func deduplicate[S ~[]T, T comparable](x S) S { seen := make(map[T]bool) j := 0 for _, v := range x { if !seen[v] { x[j] = v j++ seen[v] = true } } var zero T for i := j; i < len(x); i++ { // Avoid memory leak x[i] = zero } return x[:j] }
seen := make(map[T]bool) j := 0 for _, v := range x { if !seen[v] { x[j] = v j++ seen[v] = true } } x = x[:j]
seen := make(map[T]bool) j := 0 for _, v := range x { if !seen[v] { x[j] = v j++ seen[v] = true } } for i := j; i < len(x); i++ { x[i] = nil } x = x[:j]
y := make(map[T]struct{}, len(x)) for _, v := range x { y[v] = struct{}{} } x2 := make([]T, 0, len(y)) for _, v := range x { if _, ok := y[v]; ok { x2 = append(x2, v) delete(y, v) } } x = x2
x.unique()
nub x
const seen = new Set(); x = x.filter( v => { if(seen.has(v)) return false; seen.add(v); return true; });
x = Array.from(new Set(x));
x = [...new Set(x)];
Iterator<T> g; T t; int i, n; for (i = 0, n = x.size(); i < n; ++i) { t = x.get(i); g = x.listIterator(i + 1); while (g.hasNext()) if (g.next().equals(t)) { g.remove(); --n; } }
Set<T> uniques = new HashSet<>(x); x.clear(); x.addAll(uniques);
x = new ArrayList<>(new LinkedHashSet<>(x));
x = new ArrayList<T>(new HashSet<T>(x));
final HashSet<T> seen = new HashSet<T>(); final Iterator<T> listIt = x.iterator(); while (listIt.hasNext()) { final T curr = listIt.next(); if (seen.contains(curr)) { listIt.remove(); } else { seen.add(curr); } }
(remove-duplicates x)
local seen = {} for index,item in ipairs(x) do if seen[item] then table.remove(x, index) else seen[item] = true end end
[NSSet setWithArray:x].allObjects
$x = array_unique($x);
var x: TList; begin for i:= x.count-1 downto 0 do if x.indexOf(x.items[i]) <> -1 then x.delete(i); end;
@x = uniq(@x);
x = list(OrderedDict(zip(x, x)))
x = list({*x})
a, b, n = 0, 0, len(x) t = None while a != n: t, b = x[a], a + 1 while b != n: if x[b] == t: del x[b] n = n - 1 else: b = b + 1 a = a + 1
x = list(set(x))
def dedup(x): y = [] for i in x: if not i in y: y.append(i) return y
x.uniq!
x.sort(); x.dedup();
let dedup: Vec<_> = x.iter().unique().collect();
x = x.distinct
(define (remove-duplicates l) (cond ((null? l) '()) ((member (car l) (cdr l)) (remove-duplicates (cdr l))) (else (cons (car l) (remove-duplicates (cdr l)))))) (remove-duplicates x)
x = x.Distinct.ToList