Minimum by key function

How can I find the minimum value of an array, but evaluating the minimum through a key function?

In Python,

In [6]: min([-3, -1, 2], key=abs)
Out[6]: -1
1 Like
julia> minimum(abs,[-2,1,3])
1

By the way, I found out this by using the “help” of the REPL, which is very useful:

julia> ? minimum

Uhm, I note that it is not the same! Sorry. I will keep searching :frowning:

edit: at least in Julia you can write your own function if searching takes longer than that:

julia> function minbykey(x;by=identity)
         min = by(x[firstindex(x)])
         imin = 1
         for i in firstindex(x)+1:lastindex(x)
           y = by(x[i])
           if y < min
             min = y
             imin = i
           end
         end
         x[imin]
       end
minbykey (generic function with 2 methods)

julia> minbykey([-2,-1,3],by=abs)
-1


As far as I know there is no built-in way right now, but 2-arg versions of findmin and argmin are coming in 1.7.

In the mean time:

minimumby(f, iter) = reduce(iter) do x, y
    f(x) < f(y) ? x : y
end
3 Likes