Project

General

Profile

Actions

Feature #6079

closed

Hash#each_sorted

Added by walker (Walter Urbaniak) about 12 years ago. Updated about 12 years ago.

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

Description

I often use my own mixin'd Hash#each_sorted that sorts the hash keys and then calls the block with the key and value. It would be useful to be added to Hash. (If this is already in Hash or Enumerable, I didn't see it.)

class Hash
def each_sorted(&block) # sort by key
self.keys.sort.each {|key| block.call(key, self[key])}
end
end

Updated by marcandre (Marc-Andre Lafortune) about 12 years ago

I feel there is no need for each_sorted as it is equivalent to sort.each (and 2 characters longer). Try:

{1 => 2, 0 => 4}.sort.each{|k, v| p "#{k} => #{v}"}

Updated by mame (Yusuke Endoh) about 12 years ago

Hello,

2012/2/25 Marc-Andre Lafortune :

I feel there is no need for each_sorted as it is equivalent to sort.each (and 2 characters longer).

Agreed. If we can implement the feature without creating an
intermediate array, it might be useful. But I have no idea
to implement.

--
Yusuke Endoh

Updated by trans (Thomas Sawyer) about 12 years ago

=begin
{1 => 2, 0 => 4}.lazy.sort.each{|k, v| p "#{k} => #{v}"}
=end

?

Updated by nobu (Nobuyoshi Nakada) about 12 years ago

Hi,

(12/02/25 9:24), Yusuke Endoh wrote:

Agreed. If we can implement the feature without creating an
intermediate array, it might be useful. But I have no idea
to implement.

It would be possible, if you can tell if the current item is smaller
than the next item before fetching the latter. In other words, it'll
need a time machine.

--
Nobu Nakada

Updated by marcandre (Marc-Andre Lafortune) about 12 years ago

  • Status changed from Open to Rejected

Closing as no implementation can improve on simple sort.each.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0