web-dev-qa-db-ja.com

Ruby(1.9)ハッシュの最後のキーと値のペアにアクセスする

Ruby 1.9の時点で、ハッシュは非常にクールな挿入順序を保持しています。最後のキーと値のペアにアクセスするための最良の方法を知りたいです。

私はこれを行ういくつかのコードを書きました:

hash.values.last

これは機能し、非常に簡単に理解できますが、中間値(値の配列)を介してではなく、最後の値に直接アクセスすることはおそらく可能です。それは...ですか?

21
davidchambers

何も組み込まれていません。しかし、もしあなたがそんなに傾いているなら、あなたは1つをモンキーパッチすることができます(もちろん、通常は推奨されません):

class Hash
  def last_value
    values.last
  end
end

その後:

hash.last_value
10
Ben Lee

ハッシュには「最初の」メソッドがありますが、配列モードで最初のペアを返します。最後に、次のことを試してください。

my_hash.to_a.last

これは、「最初のメソッド」のような配列モードで最後のペアを返します

私が自分で使用しているもう1つの選択肢:

hash[hash.keys.last]

これは、ハッシュの最後の要素に直接値を割り当てたい場合にうまく機能します。

2.4.1 :001 > hash = {foo: 'bar'}
 => {:foo=>"bar"} 
2.4.1 :002 > hash[hash.keys.last] = 'baz'
 => "baz" 
2.4.1 :003 > hash.values.last = 'bar'
NoMethodError: undefined method `last=' for ["baz"]:Array
Did you mean?  last
    from (irb):3
    from /home/schuylr/.rvm/rubies/Ruby-2.4.1/bin/irb:11:in `<main>'
21
sjagr

非常に大きなハッシュに対してこれを実行しました。

hash.reverse_each.with_index do |(_, value), index|
  break value if (index == 0)
end
3
SHS