On Tuesday, May 6, 2025 3:19:29 PM Mountain Daylight Time Pete Padil via Digitalmars-d-learn wrote: > I compiled and ran the following test program: > ```d > import std.stdio, std.algorithm; > > void main() > { > long[] a = [1, 2, 3, 15, 4]; > auto b = a[].strip(15); > writeln(a); > writeln(b); > } > ``` > I get: > [1, 2, 3, 15, 4] > [1, 2, 3, 15, 4] > It did not remove 15, it does work if 15 is at the beginning or > end. > Is this a bug or am I misunderstading the docs? > > version: 1.41.0-beta1 (DMD v2.111.0, LLVM 19.1.7) > > thanks
strip removes the requested elements from the ends (whereas stripLeft does it from the front of the range, and stripRight does it from the back of the range). It's a generalization of the strip function which strips whitespace from both ends (what some languages call trim). If you want to remove an element from the middle, then std.algorithm.iteration.filter will return a lazy range which filters elements based on the predicate - e.g. auto result = range.filter!(a=> a != 15)(); and if you want an array instead of a lazy range, you can allocate a new one with std.array.array, e.g. auto result = range.filter!(a=> a != 15)().array(); Alternatively, std.algorithm.mutation.remove can be used to remove an element at a specific index (shifting all of the other elements after it in the array), but then you'll need to use a function such as std.algorithm.searching.find or std.algorithm.countUntil to get the element's offset to pass to remove. - Jonathan M Davis