2012-08-28 8 views
6

配列のような位置でハッシュ値を取得したい。ルビの位置でハッシュ値を取得するには?

例:この配列において h = Hash["a" => 100, "b" => 200]

我々は[0]、それは与えられた配列の最初の要素を返す時間を呼び出します。

ハッシュでも同じことができますか?そうなら、どうですか?

ありがとうございました。 Prasad。

+1

ハッシュと順序は、Rubyでtogethrうまく行っていないので、あなたはより良い代わりに、配列を使用することでしょう。 – oldergod

答えて

5

位置は、定義によっては順序付けられていないセットであるため、ハッシュであまりよく定義されていないものです。

irb(main):001:0> h = {:a => 1, :b => 2} 
=> {:b=>2, :a=>1} 
irb(main):002:0> h.to_a 
=> [[:b, 2], [:a, 1]] 
0

あなたはキーのみで要素を取得することができます:それでもあなたは配列にハッシュに変換して、あなたが知っている道を進むことができ、そのようなことを行うことができるという主張すれば。ハッシュは、集合のような順序がない構造です。単純にこのような

+0

Ruby 1.9.3以降は正しくありません – mykola

1

h.values[0] 
# or 
h.keys[0] 

しかし、要素の順序は、多分、彼らはあなたがそれらを取得したいと思い順序ではありませんが、定義されていません。

0

ハッシュ値は、他の回答で説明されているように、キーによってのみアクセスできます。配列のインデックスプロパティは、ハッシュではサポートされていません。あなたがRubyで順序付けられたハッシュを使用したい場合は、ActiveSupport :: OrderedHashを使うことができますが、私はあなたがこの機能を探しているとは思わないでしょう。

9

前述したように、あなたのユースケースに応じて、あなたがこれを行うことができます。

h.keys[0] 
    h.values[0] 
    h.to_a[0] 

Rubyの1.9.1以来Hashは、挿入順序を保持します。あなたがRuby 1.8互換性が必要な場合ActiveSupport::OrderedHashは良いオプションです。

2

あなたが必要なものを得るためにハッシュを拡張することができます(ルビー1.9.x)は以下:

class Hash 
    def last    # first is already defined 
    idx = self.keys.last 
    [idx , self[idx]] 
    end 
    def array_index_of(n) # returns nth data 
    idx = self.keys[n] 
    self[idx] 
    end 
end 

h = {"a" => 100, "b" => 200} 
h.first # ["a", 100] 
h.last # ["b", 200] 

h.array_index_of(0) # => 100 
h.array_index_of(1) # => 200 
関連する問題