有没有一种标准方法来复制数组,排除等于对象的元素?我目前天真的解决方案:
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会很好,但它不接受[]作为第二个论点.
这听起来像你想要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)转换FilterResult为array..array如果要创建和存储单独的"副本",则应该调用.如果您只想迭代FilterResult,可以foreach像使用任何范围一样使用.
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |