В Ruby есть способ «arr.sort {| i | Math.cos (i) * Math.sin (i)}» вместо использования | i, j | и повторить это дважды? - PullRequest
1 голос
/ 01 ноября 2010

Например код:

irb(main):001:0> a = [1, 2, 3, 4, 5]
=> [1, 2, 3, 4, 5]

irb(main):002:0> a.sort {|d,e| (d - 3).abs <=> (e - 3).abs}
=> [3, 2, 4, 1, 5]    # sort by closest distance away from the number 3

не очень хорошо повторять выражение дважды, и слишком тривиально создавать функцию только для этого выражения. Есть ли способ написать что-то вроде

irb(main):002:0> a.sort {|e| (e - 3).abs}  # compare by this expression

1 Ответ

8 голосов
/ 01 ноября 2010

Вы ищете метод sort_by:

a.sort_by {|e| (e - 3).abs}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...