2014-12-06 24 views
2

是否有一種標準方法來複制排除等於對象的元素的數組?我現在的天真的解決方案:從陣列在排除元素的同時複製數組

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

刪除元素似乎不必要的困難在d和不可改變的方法似乎相當不錯,所以我想創造一個新的,而不是修改現有陣列。 std.array.replace可以正常工作,但不接受[]作爲第二個參數。

回答

7

這聽起來像你想std.algorithmfilter

例如:

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