File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -111,6 +111,28 @@ mod inner {
111111 Sequence :: Deque ( d) => d. try_borrow ( ) ?. iter ( ) . try_max ( ) ,
112112 }
113113 }
114+ pub fn max_by_key ( seq : & mut Sequence , func : & Callable < ' _ > ) -> EvaluationResult {
115+ let mut best_value = None ;
116+ let mut best_key = None ;
117+
118+ for value in mut_seq_to_iterator ( seq) {
119+ if let Some ( best_key_val) = & best_key {
120+ let new_key = func. call ( & mut [ value. clone ( ) ] ) ?;
121+ if & new_key > best_key_val {
122+ best_key = Some ( new_key) ;
123+ best_value = Some ( value) ;
124+ }
125+ } else {
126+ best_key = Some ( func. call ( & mut [ value. clone ( ) ] ) ?) ;
127+ best_value = Some ( value) ;
128+ }
129+ }
130+
131+ match best_value {
132+ None => Err ( anyhow:: anyhow!( "empty input to max_by_key" ) ) ?,
133+ Some ( value) => Ok ( value) ,
134+ }
135+ }
114136
115137 /// Returns the lowest element in the sequence.
116138 pub fn min ( seq : & Sequence ) -> anyhow:: Result < Value > {
You can’t perform that action at this time.
0 commit comments