« Return to Thread: [ruby-list:43857] Hashへの生成順は保障されないのか?

[ruby-list:43859] Re: Hashへの生成順は保障されないのか?

by 内山紀明 :: Rate this Message:

Reply to Author | View in Thread

はじめまして,内山と申します.

> の順になってしまいました。できれば生成していった順で
> 表示されるとよいのですが、hashの中身はどのような基準で

Hashクラスを継承したクラスを定義してはいかがでしょうか.
例えば,以下のようにOrderedHashクラスを定義します.

class OrderedHash < Hash
  def initialize
    @index = []
  end

  def []=(key, val)
    @index.push(key)
    super(key, val)
  end

  def each
    @index.each do |key|
      yield(key, self[key])
    end
    self
  end
end

[]=とeachメソッドをオーバーライドしています.
結果として以下のようになります.

>> pair = OrderedHash.new
=> {}
>> pair["apple"]="apple"
=> "apple"
>> pair["and"]="and"
=> "and"
>> pair["bee"]="bee"
=> "bee"
>> pair["cat"]="cat"
=> "cat"
>> pair["dog"]="dog"
=> "dog"

>> pair.each do |key, val|
>>   print key, "=>", val, "\n"
>> end
apple=>apple
and=>and
bee=>bee
cat=>cat
dog=>dog
=> {"cat"=>"cat", "and"=>"and", "bee"=>"bee", "apple"=>"apple", "dog"=>"dog"}

ご参考になれば幸いです.


--
--- We Ain't Seen Nothin' Yet.
 内山 紀明
 uchiyama.noriaki@...
 http://blog.fulltext-search.biz/

 « Return to Thread: [ruby-list:43857] Hashへの生成順は保障されないのか?