在Julia中查找数组中某个项目的第一个索引

25

在Julia中,找到数组中某个元素第一次出现的最简单方法是什么?

2个回答

37

findfirst和更一般的findnext,它允许您从离开的地方重新开始。这两个函数的一个优点是您不需要分配输出数组,因此性能会更好(如果您关心的话)。

另外,请记住(与您可能习惯的某些其他语言不同),Julia的循环速度很快,因此您总是可以编写这样的简单函数。为了理解我所说的,看一下base/array.jlfindnext的实现;它并没有什么“花哨”的东西,但您将得到与使用C实现相同的性能。


谢谢,我就知道一定有这样一个函数 :) - fhucho
你能否添加findfirst()和findnext()的文档链接? - Peter Mortensen
请阅读以下内容(findnext稍后在同一页中出现),有关编程的相关内容,请参见:https://docs.julialang.org/en/latest/base/arrays/#Base.findfirst-Tuple{Any}。 - tholy
2
findfirst的固定链接:https://docs.julialang.org/en/v1/base/arrays/#Base.findfirst-Tuple{Any} - Bo Lu

8

您可以按照以下方式使用 findfirst

A = [1, 4, 2, 3, 2]

function myCondition(y)
    return 2 == y
end

println( findfirst(myCondition, A) )

# output: 3

你可以在这个链接中阅读更多关于Base.findfirst函数的信息。

根据文档,您可以使用isequal(2)代替myCondition,但是我却收到了错误消息:no method matching isequal(::Int64) - Mohammad Nazari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接