复制数组,同时排除元素

时间:2014-12-06 16:04:44

标签: arrays d

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

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

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

1 个答案:

答案 0 :(得分:7)

听起来你想要std.algorithm' s filter

例如:

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]);
}

请注意,过滤器会返回FilterResult(一种范围),而不是array。最后的来电.array(来自std.array)会将FilterResult转换为array。 如果您要创建并存储单独的副本,则应致电.array。如果您只想迭代FilterResult,则可以像使用任何范围一样使用foreach