配列のように位置ごとにハッシュ値を取得したい。
例:
h = Hash["a" => 100, "b" => 200]
この配列で h[0] を呼び出すと、指定された配列の最初の要素が返されます。
ハッシュで同じことが可能ですか?もしそうなら、どうやって?
前もってありがとう、プラサド。
配列のように位置ごとにハッシュ値を取得したい。
例:
h = Hash["a" => 100, "b" => 200]
この配列で h[0] を呼び出すと、指定された配列の最初の要素が返されます。
ハッシュで同じことが可能ですか?もしそうなら、どうやって?
前もってありがとう、プラサド。
上記のように、ユースケースに応じて、次の方法でこれを行うことができます。
h.keys[0]
h.values[0]
h.to_a[0]
Ruby 1.9.1 以降Hash
、挿入順序が保持されます。Ruby 1.8 との互換性が必要な場合ActiveSupport::OrderedHash
は、良いオプションです。
位置は、定義上、順序付けされていないセットであるため、ハッシュであまり明確に定義されていないものです。それでも、そのようなことができると主張する場合は、ハッシュを配列に変換してから、次のように進めることができます。
irb(main):001:0> h = {:a => 1, :b => 2}
=> {:b=>2, :a=>1}
irb(main):002:0> h.to_a
=> [[:b, 2], [:a, 1]]
ハッシュを拡張して、必要なものを取得できます(ruby 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
単に次のように:
h.values[0]
# or
h.keys[0]
しかし、要素の順序は定義されていません。取得したい順序になっていない可能性があります。
ハッシュ値は、他の回答で説明されているように、キーによってのみアクセスできます。配列のindexプロパティは、ハッシュではサポートされていません。ルビーで順序付けされたハッシュを使用したい場合は、ActiveSupport :: OrderedHashを使用できますが、この機能を探しているとは思いません。
キーだけで要素を取得できます。ハッシュは、セットのように順序がない構造です。