复制数组,同时排除元素

wel*_*urm 2 arrays d

有没有一种标准方法来复制数组,排除等于对象的元素?我目前天真的解决方案:

T[] without(T)(T[] array, T what){
    T[] a;
    foreach(element; array)
        if(element != what)
            a ~= element;
    return a;
}
Run Code Online (Sandbox Code Playgroud)

在D中删除数组中的元素似乎不必要地困难,并且不可变的方法看起来相当不错,所以我想创建一个新的而不是修改现有的数组. std.array.replace会很好,但它不接受[]作为第二个论点.

rco*_*rre 7

这听起来像你想要std.algorithm过滤器.

例如:

import std.algorithm, std.array;
void main() {
  auto a = [1, 2, 3, 3, 4];
  auto without3 = a.filter!(x => x != 3).array;
  assert(without3 == [1, 2, 4]);
}
Run Code Online (Sandbox Code Playgroud)

请注意,过滤器返回FilterResult(一种范围),而不是array.最后的呼叫.array(从std.array)转换FilterResultarray..array如果要创建和存储单独的"副本",则应该调用.如果您只想迭代FilterResult,可以foreach像使用任何范围一样使用.