The function has this fingerprint searchsortedfirst(a, x; by=<transform>, lt=<comparison>, rev=false)
.
The comparison between the value to be searched for x and the candidate values a_i is done in the following way lt(by(x),by(a_i))
until the first a_i >=x
is found.
I’ll try to give some examples to clarify, in the end, Dan’s “slightly awkward” use of it (euphemism).
julia> searchsortedfirst(1:10,-3)
1
julia> searchsortedfirst(1:10,-3,by= abs)
3
julia> searchsortedfirst(1:10,0,by=a_i->(a_i==0 ? 3 : sqrt(a_i)))
9
How does this last case work?
You are required to find the first value in 1:10 that is >=0.
But the comparison is done by first transforming the values with by().
therefore the
first comparison lt( by(x), by(a_1)) is 3 <= sqrt(1);
the second comparison lt( by(x), by(a_1)) is 3 <= sqrt(2);
…
the ninth comparison lt( by(x), by(a_1)) is 3 <= sqrt(9); it’s the “good” one.
You might think that 0 is a particular value but it plays no specific role.
See the examples below:
julia> searchsortedfirst(1:10,NaN,by=x->(x===NaN ? 3 : sqrt(x)))
9
julia> searchsortedfirst(1:10,'x',by=x->(x=='x' ? 3 : sqrt(x)))
9
I add an alternative solution that could be useful if you have to do a lot of research.
gdf=groupby(df2,[:dates,:times])
d=Dict(zip(Tuple.(keys(gdf)),gdf.starts))
d[(Date(2024,2,23),Time(10,00,00))]