From: prijutme4ty@... Date: 2014-05-06T14:00:51+00:00 Subject: [ruby-core:62420] [ruby-trunk - Feature #9808] [Open] Enumerable#argmin_by, #argmax_by Issue #9808 has been reported by Ilya Vorontsov. ---------------------------------------- Feature #9808: Enumerable#argmin_by, #argmax_by https://bugs.ruby-lang.org/issues/9808 * Author: Ilya Vorontsov * Status: Open * Priority: Normal * Assignee: * Category: * Target version: ---------------------------------------- What about introducing Enumerable #argmin_by (and #argmax_by too, of course) method? Use cases are wide from mathematical problems to a general tasks. Here are two very simple examples: (1..2).step(0.01).argmin_by{|x| Math.sin(x)*x} queues = [[],[],[],[]] # ... least_busy_queue = queues.argmin_by{|queue| queues.size } least_busy_queue << new_task For cases when #argmin_by isn't enough because one need to obtain index of minimal element I suggest #index_min_by method which returns index of element for which block yields minimal value. It prevents user from using ineffective but straight two-pass algorithm like arr.index(arr.min): # guess the number game hidden_number = rand(100) player_answers = 5.times.map{ gets.to_i } best_player = player_answers.index_min_by{|answer| (answer-hidden_number).abs} -- https://bugs.ruby-lang.org/