我在Julia中有一个简单的程序:
a = [1, 2, 3, 10, 20, 30]
delete!(a, 10)
Run Code Online (Sandbox Code Playgroud)
但它不起作用。错误是MethodError: no method matching delete!(::Array{Int64,1}, ::Int64)
我可以看到deleteat!并splice!接受索引而不是值。
如何10从aJulia中的数组中删除元素?
使用filter!功能过滤值10。的?(类型\ne和按TAB)就派上用场了!
julia> a = [1, 2, 3, 10, 20, 30]
6-element Array{Int64,1}:
1
2
3
10
20
30
julia> filter!(x->x?10,a)
5-element Array{Int64,1}:
1
2
3
20
30
julia>
Run Code Online (Sandbox Code Playgroud)
如果阵列中有多个10,则该解决方案甚至可以使用。
julia> a = [1,10,10]
3-element Array{Int64,1}:
1
10
10
julia> filter!(x->x?10,a)
1-element Array{Int64,1}:
1
Run Code Online (Sandbox Code Playgroud)
从文档 deleteat!
deleteat!(a::Vector, inds)删除由 给出的索引处的项目
inds,并返回修改后的a。随后的项目被转移以填补由此产生的空白。
inds可以是迭代器或排序的唯一整数索引的集合,也可以是长度a与 true相同的布尔向量,指示要删除的条目。
(强调我的)。
即,您可以简单地测试(元素)相等性,并将其用于“布尔索引”,就像普通数组一样:
deleteat!(a, a .== 10);
Run Code Online (Sandbox Code Playgroud)
PS:或者如果你只想删除第一个:deleteat!(a, findfirst(a .== 10));