替换“ occursin”函数以在数组中找到字符串{String,1}

时间:2019-04-21 19:30:22

标签: julia

我想做的是

i = occursin("ENTITIES\n", lines)
i != 0 || error("ENTITIES section not found")

错误信息是

ERROR: LoadError: LoadError: MethodError: no method matching occursin(::String, ::Array{String,1})
Closest candidates are:
  occursin(::Union{AbstractChar, AbstractString}, ::AbstractString) at strings/search.jl:452

这是一段julia v0.6代码。我现在正在使用v1.1。我是julia的新手,不知道什么是适当的替代功能。请帮忙。

1 个答案:

答案 0 :(得分:1)

您可以像这样广播orrursin(在函数名称后添加.):

julia> x = "abc"
"abc"

julia> y = ["abc", "xyz"]
2-element Array{String,1}:
 "abc"
 "xyz"

julia> b = occursin.(x, y)
2-element BitArray{1}:
  true
 false

julia> findall(b)
1-element Array{Int64,1}:
 1

julia> findfirst(b)
1

请注意,尽管String可以在其上进行迭代,但仍被广播视为标量。

还应该记住occursin返回Bool的值,以便您可以在逻辑测试中直接使用它,例如您问题中的代码中的i || error("ENTITIES section not found")

为了在广播的true的返回值中occursin的出现集合中找到索引,请使用findallfindfirst函数(还有{ {1}})。区别在于findlast返回条目的向量,其中集合中遇到findall,而true仅返回第一个这样的条目。还要注意将所有findfirst传递给它时的区别。 falses将返回一个空向量,而findall将返回findfirst

如果您不想在上面的代码中保留向量nothing,则可以通过将谓词作为第一个参数传递给b / {来直接获取索引(应该更快)。 {1}}:

findall