我在Julia有这个简单的程序:
a = [1, 2, 3, 10, 20, 30]
delete!(a, 10)
但它不起作用。错误为MethodError: no method matching delete!(::Array{Int64,1}, ::Int64)
我可以看到deleteat!
和splice!
接受索引而不是值。
如何从Julia中的数组10
中删除元素a
?
答案 0 :(得分:4)
使用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>
如果阵列中有多个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
答案 1 :(得分:2)
来自deleteat!
deleteat!(a::Vector, inds)
删除
inds
指定的索引处的项目,并返回修改后的a
。转移后续项目以填补产生的差距。
inds
可以是迭代器,也可以是有序和唯一整数索引的集合,或与a
长度相同的布尔向量,其中true表示要删除的条目
(强调我的)。
即,您可以简单地测试(elementwise)相等,并将其用于“布尔索引”,就像使用普通数组一样:
deleteat!(a, a .== 10);
PS:或者如果你只想删除第一个:deleteat!(a,findfirst(a。== 10));