2016-02-09 16 views
9

Tôi đã lang thang một lúc trong tài liệu và trong diễn đàn và tôi không tìm thấy phương thức/hàm được xây dựng để thực hiện nhiệm vụ đơn giản xóa một phần tử trong một mảng. Có chức năng tích hợp như vậy không?Xóa phần tử trong một mảng cho julia

Tôi yêu cầu tương đương với python's list.remove (x).

Dưới đây là một ví dụ về ngây thơ chọn một chức năng từ hộp:

julia> a=Any["D","A","s","t"] 
julia> pop!(a, "s") 
ERROR: MethodError: `pop!` has no method matching  
pop!(::Array{Any,1},  ::ASCIIString) 
Closest candidates are: 
    pop!(::Array{T,1}) 
    pop!(::ObjectIdDict, ::ANY, ::ANY) 
    pop!(::ObjectIdDict, ::ANY) 
    ... 

Here đề cập để sử dụng deleteat!, nhưng cũng không làm việc:

julia> deleteat!(a, "s") 
ERROR: MethodError: `-` has no method matching -(::Int64, ::Char) 
Closest candidates are: 
    -(::Int64) 
    -(::Int64, ::Int64) 
    -(::Real, ::Complex{T<:Real}) 
    ... 

in deleteat! at array.jl:621 

Trả lời

7

Bạn cũng có thể đi với filter!:

a = Any["D", "A", "s", "t"] 
filter!(e->e≠"s",a) 
println(a) 

cho:

Any["D","A","t"] 

này cho phép xóa nhiều giá trị cùng một lúc, như trong:

filter!(e->e∉["s","A"],a) 

Lưu ý 1: Trong Julia 0,5, chức năng ẩn danh nhanh hơn nhiều và hình phạt nhỏ cảm thấy trong 0.4 không còn là vấn đề nữa :-) .

Lưu ý 2: Mã ở trên sử dụng toán tử unicode. Với các toán tử thông thường: !=e∉[a,b]!(e in [a,b])

+1

Đây là giải pháp tốt nhất. Nhưng đối với tôi bộ lọc! không hoạt động. Chỉ cần lọc là đủ. Vì vậy, nếu tôi có Array b = ["s", "A"] tôi có thể sử dụng làm bộ lọc này (e-> e∉b, a) hoạt động tốt. –

6

deleteat! + findin sẽ làm điều đó:

a = Any["D", "A", "s", "t"] 
deleteat!(a, findin(a, ["s"])) # => ["D", "A", "t"] 

đây là bởi vì pop! không có phương pháp loại bỏ một phần tử cụ thể trong một mảng, nó chỉ loại bỏ phần tử cuối cùng, và deleteat! cần chỉ mục của phần tử bạn muốn loại bỏ. Bạn có thể kiểm tra các phương pháp mà một hàm có với methods:

methods(pop!) 
methods(deleteat!) 

Đối với một Dict, bạn có thể ăn quan trọng của nguyên tố này để loại bỏ để delete!.

Các vấn đề liên quan