Project

General

Profile

Actions

Feature #9808

closed

Enumerable#argmin_by, #argmax_by

Added by prijutme4ty (Ilya Vorontsov) almost 10 years ago. Updated almost 10 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-core:62420]

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

Also available in: Atom PDF

Like0
Like0Like0Like0