From: nobu@... Date: 2016-08-05T05:58:56+00:00 Subject: [ruby-core:76741] [Ruby trunk Feature#12648] `Enumerable#sort_by` with descending option Issue #12648 has been updated by Nobuyoshi Nakada. Greg L wrote: > Hence, a better solution might be adding a method like `sort_keys` or `sort_key`, where an array is returned by the block, and an array is used as the single parameter for ascending/descending info. Could you make clear what object these `sort_key`/`sort_keys` methods belong to? The array to be sorted? Or the returned object (it may not be an array) from the block? > I might suggest, rather than true / false, or :asc / :desc, use 1 for ascending and -1 for descending. > > If the parameter array is shorter, remaining keys could default to ascending, if it's longer, it's truncated. > > Or (and maybe better), it could just raise an error if the arrays are different length. Do you mean `enum.sort_by(-1) {...}` for descending? ---------------------------------------- Feature #12648: `Enumerable#sort_by` with descending option https://bugs.ruby-lang.org/issues/12648#change-59962 * Author: Tsuyoshi Sawada * Status: Open * Priority: Normal * Assignee: ---------------------------------------- I would like to pass an optional argument to `Enumerable#sort_by` or `Enumerable#sort_by!` to allow descending sort. When the sort key is singular, this could be done by passing a single optinal boolean variable that represents ascending when `false` (default) and descending when `true`: ```ruby [3, 1, 2].sort_by(&:itself) # => [1, 2, 3] [3, 1, 2].sort_by(false, &:itself) # => [1, 2, 3] [3, 1, 2].sort_by(true, &:itself) # => [3, 2, 1] ``` When there are multiple sort keys, corresponding numbers of arguments should be passed: ```ruby [3, 1, 2, 0].sort_by{|e| [e % 2, e]} # => [0, 2, 1, 3] [3, 1, 2, 0].sort_by(false, false){|e| [e % 2, e]} # => [0, 2, 1, 3] [3, 1, 2, 0].sort_by(false, true){|e| [e % 2, e]} # => [2, 0, 3, 1] [3, 1, 2, 0].sort_by(true, false){|e| [e % 2, e]} # => [1, 3, 0, 2] [3, 1, 2, 0].sort_by(true, true){|e| [e % 2, e]} # => [3, 1, 2, 0] ``` -- https://bugs.ruby-lang.org/ Unsubscribe: