Actions
Feature #9808
closedEnumerable#argmin_by, #argmax_by
Status:
Rejected
Assignee:
-
Target version:
-
Description
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}
Updated by nobu (Nobuyoshi Nakada) almost 10 years ago
- Description updated (diff)
- Status changed from Open to Feedback
Could you explain what it does?
Updated by prijutme4ty (Ilya Vorontsov) almost 10 years ago
I'm sorry for this issue. It looks, I've misunderstood and underestimated #min_by functionality. I think issue can be closed.
Updated by Eregon (Benoit Daloze) almost 10 years ago
- Status changed from Feedback to Rejected
Actions
Like0
Like0Like0Like0