2011-08-05 9 views
10

でRubyの配列のうちの最初の項目を取得します。私はこのようになりますRubyのハッシュを持つハッシュ

h = {"side1"=>["green", "Green"], "side2"=>["verde", "Verde"]} 

私はハッシュの特定のキーで最初(または最後)の項目を取得できますか?

+2

'puts h ['side2] .first'は完全に有効な構文です。 'puts h ['side2] [0]'も動作します。 –

+2

私は人々がなぜこの質問をd​​ownvotingするのか分からない。私はstackoverflowには新しいですが、ここでdownvotingはrtfmのようなものです。質問が明白で、あなたがから学ぶことができるなら、それは私の本の中で良いです。 – BF4

+0

^要件に関して、なぜこの施設を必要とするのかわかりません。データ構造が適切に使用され、実装が同様に良好であれば(ハックなしで)。あなたはこれを必要としません。結局あなたはkeyを使ってハッシュ要素を選び、それ以外のものを選ぶか、配列を使います。また、質問は 'ハッシュの最初の要素'にすぎないはずです。ハッシュの配列は別のものを意味します。 – Ninad

答えて

6

実際、あなたの疑問の例の疑似コードは正しいです。

あなたのハッシュ

h = { 
    "side1" => ["green", "Green"], 
    "side2" => ["verde", "Verde"] 
} 

のためのキーが'side1''side2'(右hashrocketのそれらの値を持つ)です

ので、h['side2'].firstは、キー'side2'の値のために、最初の要素を取得することを言います値は["verde", "Verde"]であり、これは配列です。 h['side2'][0]も機能します。エイリアスfirstは便利な方法です。

大きさを知らずに配列の最後の要素を取得するには、負のインデックスを使用します。例えばh['side2'][-1]であり、この場合はh['side2'][1]に相当します。

ハッシュのキーは、それが文字列かシンボルかを区別します。つまり、キーが設定されていないので、h[:side2]はnilを返します。 Railsにはシンボルと文字列を同等のキーとして扱うクラスHashWithIndifferentAccessがあります。

EDIT

私はirbに私の答えをテストしたことに言及している必要があります。 irbは、何が機能するかどうかについてのアイデアをテストするのに最適な方法です。あなたのターミナルプロンプトで、irbと入力し、ルビーで遊んでください。

+0

ありがとう!私はそれがうまくいかないと思ったので私自身の答えを試みなかった。私はRuby Hashを初めて使用しています。 – Andrew

+0

問題ありません。 irbは、特にルビーがとてもダイナミックで何かを行うことができるため、機能を使いたいときには本当に便利です。私はそれをいつも使っています(1行にペーストできるように修正しました):class String; def wild; "野生";終わり;終わり; bar = "foo";バーを置きます。 def bar.wild; "と狂った";終わり; puts bar.wild – BF4

2

はい。 puts h["side2"].firstが動作するはずです。私はこれが、Rubyが驚くべきことではなく、実際のコードと同じであることが判明した驚きの原則に従うことを示していると思います。 :-)

6

私は、任意のテストコードのハッシュから「最初の」エントリを欲しかったという同様の状況に遭遇しました。それはまさにこの質問に関するものではありませんが、私はそれが他の人たちと同じようになるかもしれないと考えて走った検索で出てきました。

もちろん、「最初の項目」はハッシュでは任意ですが、キーメソッドはいくつかの魔法でソートされたすべてのキーのリストを返します。もしそのソート順のように、あなたは

h[h.keys.first] 
5

で「最初」の方法を得ることができ、任意のハッシュキーを持っており、 値ならば、あなたは単にあなたが値の配列を持つことになります

hash.values.first 
hash.values.last 
hash.keys.first 
hash.keys.last 

を作ることができますあなたが最初か最後の場合には

関連する問題