J'ai erré pendant un moment dans la documentation et les forums et je n'ai pas trouvé de méthode/fonction intégrée permettant de supprimer un élément d'un tableau. Existe-t-il une telle fonction intégrée?
Je demande l'équivalent de list.remove de python (x).
Voici un exemple de sélection naïve d'une fonction de la boîte:
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 mentionne l'utilisation de deleteat!
, mais ne fonctionne pas non plus:
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
Vous pouvez aussi aller avec filter!
:
a = Any["D", "A", "s", "t"]
filter!(e->e≠"s",a)
println(a)
donne:
Any["D","A","t"]
Cela permet de supprimer plusieurs valeurs à la fois, comme dans:
filter!(e->e∉["s","A"],a)
Note 1: Dans Julia 0.5, les fonctions anonymes sont beaucoup plus rapides et le peu de pénalité ressentie dans 0.4 n’est plus un problème :-).
Note 2: Le code ci-dessus utilise des opérateurs Unicode. Avec des opérateurs normaux: ≠
est !=
et e∉[a,b]
est !(e in [a,b])
deleteat!
+ findin
le fera:
a = Any["D", "A", "s", "t"]
deleteat!(a, findin(a, ["s"])) # => ["D", "A", "t"]
c'est parce que pop!
n'a pas de méthode pour éliminer un élément particulier dans un tableau, il n'élimine que le dernier et deleteat!
a besoin de l'index de l'élément que vous voulez éliminer. Vous pouvez vérifier les méthodes d'une fonction avec methods
:
methods(pop!)
methods(deleteat!)
Pour un Dict
, vous pouvez alimenter la clé de l'élément à éliminer en delete!
.
En fonction de l'utilisation, il est également bon de connaître setdiff
et sa version sur place setdiff!
:
Julia> setdiff([1,2,3,4], [3])
3-element Array{Int64,1}:
1
2
4
Toutefois, notez qu'il supprime également tous les éléments répétés, comme illustré dans l'exemple:
Julia> setdiff!([1,2,3,4, 4], [3])
3-element Array{Int64,1}:
1
2
4