7

配列のように位置ごとにハッシュ値を取得したい。

例: h = Hash["a" => 100, "b" => 200]

この配列で h[0] を呼び出すと、指定された配列の最初の要素が返されます。

ハッシュで同じことが可能ですか?もしそうなら、どうやって?

前もってありがとう、プラサド。

4

6 に答える 6

11

上記のように、ユースケースに応じて、次の方法でこれを行うことができます。

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

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

于 2012-08-28T08:52:31.517 に答える
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]]
于 2012-08-28T08:26:59.120 に答える
2

ハッシュを拡張して、必要なものを取得できます(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
于 2013-03-22T17:40:52.087 に答える
1

単に次のように:

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

しかし、要素の順序は定義されていません。取得したい順序になっていない可能性があります。

于 2012-08-28T08:28:06.313 に答える
0

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

于 2012-08-28T08:43:41.010 に答える
0

キーだけで要素を取得できます。ハッシュは、セットのように順序がない構造です。

于 2012-08-28T08:27:26.247 に答える