如何在Julia中按值从数组中删除元素?

时间:2017-09-08 15:14:22

标签: julia

我在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

2 个答案:

答案 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));