julia

2016-02-09 34 views
9
için bir dizide öğe silme

Dokümanlar ve forumlarda bir süredir dolaşıyordum ve bir dizideki bir öğeyi silme işlemini basit bir şekilde yapmak için bir yöntem/işlev bulamadım. Yerleşik fonksiyon var mı?julia

Python'un list.remove (x) eşdeğerini istiyorum. çalışmıyor da

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) 
    ... 

Heredeleteat! kullanmak bahseder, fakat:

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 

cevap

7

Ayrıca filter! ile gidebilirsiniz:

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

verir:

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

Not 1:

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

Bu gibi aynı anda birden değerleri silmek için izin verir ise Julia 0.5, anonim işlevler çok daha hızlı ve 0,4'te hissedilen küçük ceza artık bir sorun değil :-) . Not 2: Yukarıdaki kod unicode operatörlerini kullanır. Not 2: Yukarıdaki kod unicode operatörlerini kullanır. Normal işleçlerle: , != ve e∉[a,b], !(e in [a,b])

+1

Bu en iyi çözümdür. Ama benim için filtre! çalışmıyor Sadece filtre yeterlidir. Bu yüzden eğer ben Array b = ["s", "A"] varsa, bu filtre olarak kullanabilirim (e-> e∉b, a) harika çalışıyor. –

6

deleteat! + findin yapacak Burada

safça kutusundan bir işlev seçmek bir örnek:

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

bu pop!, bir Dizideki belirli bir öğeyi ortadan kaldırmak için bir yönteme sahip olmadığından, yalnızca sonuncuyu ortadan kaldırır ve deleteat!, ortadan kaldırmak istediğiniz öğenin dizinine gereksinim duyar. Bir fonksiyon methods ile olan yöntemler kontrol edebilirsiniz:

methods(pop!) 
methods(deleteat!) 

bir Dict için, delete! için ortadan kaldırmak için elemanın anahtarını besleyebilir.