Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #136 Remove all occurrences of a value from a list

Remove all occurrences of the value x from list items.
This will alter the original list or return a new list, depending on which is more idiomatic.

import java.util.Collections;
items.removeAll(Collections.singleton(x));
import java.util.Iterator;
Iterator<T> i = items.listIterator();
while (i.hasNext())
    if (i.next().equals(x)) i.remove();
items.removeIf(t -> t.equals(x));
(remove #{x} items)
items.remove(x);
using System.Collections.Generic;
items.RemoveAll(r => r == x);
import std.algorithm.iteration;
import std.array;
items = items.filter!(a => a != x).array;
items.removeWhere((y)=>y==x);
Enum.filter(items, fn v -> v != x end)
items = pack (items,items != x)
import "slices"
items = slices.DeleteFunc(items, func(e T) bool {
	return e == x
})
func removeAll[S ~[]T, T comparable](items *S, x T) {
	j := 0
	for i, v := range *items {
		if v != x {
			(*items)[j] = (*items)[i]
			j++
		}
	}
	var zero T
	for k := j; k < len(*items); k++ {
		(*items)[k] = zero
	}
	*items = (*items)[:j]
}
items2 := make([]T, 0, len(items))
for _, v := range items {
	if v != x {
		items2 = append(items2, v)
	}
}
j := 0
for i, v := range items {
	if v != x {
		items[j] = items[i]
		j++
	}
}
for k := j; k < len(items); k++ {
	items[k] = nil
}
items = items[:j]
j := 0
for i, v := range items {
	if v != x {
		items[j] = items[i]
		j++
	}
}
items = items[:j]
filter (/= x) items
const newlist = items.filter(y => x !== y)
(remove-if (lambda (val) (= val x)) items)
$newItems = array_diff($items, [$x]);
var
  i: integer;

for i:= items.count-1 downto 0 do
  if items[i] = x then
    items.delete(i);
my @filtered = grep { $x ne $_ } @items;
newlist = [item for item in items if item != x]
items.delete(x)
items.retain(|&item| item != x);
items = items.into_iter().filter(|&item| item != x).collect();
items.filter(_ != x)
items reject: [: y | y = x ]

New implementation...