У меня есть массив, подобный следующему:
julia> list = [(x, rand(0:9), rand(0:9)) for x in 1:5]
5-element Array{Tuple{Int64,Int64,Int64},1}:
(1, 7, 2)
(2, 1, 3)
(3, 4, 7)
(4, 4, 8)
(5, 8, 3)
Я бы хотел найти в этом списке элемент, у которого третье значение наибольшее. Если я просто делаю maximum(list)
, он использует порядок по умолчанию (лексикографический), а это не то, что мне нужно:
julia> maximum(list)
(5, 8, 3)
Я могу использовать пользовательское преобразование / предикат by
, если я сортирую весь список:
julia> sort(list, by=x->x[3], rev=true)
5-element Array{Tuple{Int64,Int64,Int64},1}:
(4, 4, 8)
(3, 4, 7)
(2, 1, 3)
(5, 8, 3)
(1, 7, 2)
Но это требует много дополнительной работы - все, что мне нужно, - это первое значение - но, похоже, maximum
не поддерживает аргумент ключевого слова by
:
julia> maximum(list, by=x->x[3])
ERROR: MethodError: no method matching maximum(::Array{Tuple{Int64,Int64,Int64},1}; by=var"#21#22"())
И если я использую функцию «преобразования» первого аргумента, я получу только третье значение:
julia> maximum(x->x[3], list)
8
Мне нужен весь элемент - (4, 4, 8)
в этом случае. Как я могу это сделать?