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))]
```