我想做的是
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的新手,不知道什么是适当的替代功能。请帮忙。
答案 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
的出现集合中找到索引,请使用findall
或findfirst
函数(还有{ {1}})。区别在于findlast
返回条目的向量,其中集合中遇到findall
,而true
仅返回第一个这样的条目。还要注意将所有findfirst
传递给它时的区别。 falses
将返回一个空向量,而findall
将返回findfirst
。
如果您不想在上面的代码中保留向量nothing
,则可以通过将谓词作为第一个参数传递给b
/ {来直接获取索引(应该更快)。 {1}}:
findall