是否有标准方法复制数组,排除等于对象的元素?我目前的天真解决方案:
T[] without(T)(T[] array, T what){
T[] a;
foreach(element; array)
if(element != what)
a ~= element;
return a;
}
在D中删除数组中的元素似乎不必要地困难,并且不可变的方法似乎相当不错,所以我想创建一个新的而不是修改现有的数组。
std.array.replace
效果很好,但不接受[]
作为第二个参数。
答案 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
。