1

私はこのようなものを持っています:

array = [
  hash1 = {"marco"=>"polo", "girth"=>"skinny", "onion"=>true},
  hash2 = {"darco"=>"johnson", "girth"=>"wide", "onion"=>false},
  hash3 = {"flarco"=>"kiwi", "birth"=>"noble", "onion"=>false}
]

いつでもonion唯一無二の場所。true

現在が であるハッシュを保持する変数 (つまり )hash1の名前を返す式または関数が必要です。どうやってやるの?hash2oniontrue

4

4 に答える 4

5

不可能だよ。オブジェクトは、それを参照する変数について知りません。

于 2013-06-17T14:05:20.753 に答える
1

同様の効果は、配列をハッシュに置き換えて:hash1,:hash2および:hash3キーを作成することによって実現できます。

変数があると仮定しhashます:

hash.keys.select{|key| hash[key]['onion']}
于 2013-06-17T14:13:28.230 に答える
0

ただし、記号:の代わりにコロンを許可して要件を少し緩和すると、次のようになります。=

array = [
  hash1: {"marco"=>"polo", "girth"=>"skinny", "onion"=>true},
  hash2: {"darco"=>"johnson", "girth"=>"wide", "onion"=>false},
  hash3: {"flarco"=>"kiwi", "birth"=>"noble", "onion"=>false}
]

それを扱うことができます:

-> *_, **p { p.find { |_, v| v["onion"] }.first }.( *array )
于 2013-06-17T17:55:59.370 に答える
-1

@Jörg W Mittagによって作成された投稿のコメント セクションで質問したとおり、配列内のハッシュから特定のキーを返す方法はありますか (ただし、タマネギのキーではありません)。. はい、以下に示すように可能です。

ここでは、キーonionHashの値を持つ1 つ以上の入力配列を考えました。今、この状況に対処する必要があります。trueenum#find_all

array = [
  {"marco"=>"polo", "girth"=>"skinny", "onion"=>true},
 {"darco"=>"johnson", "girth"=>"wide", "onion"=>true},
  {"flarco"=>"kiwi", "birth"=>"noble", "onion"=>false}
]

array.find_all{|i| i["onion"]== true}.map{|i| i.keys[0]}
#>>["marco", "darco"]

OPの入力配列に従って、動作しenum#findます。

array = [
  {"marco"=>"polo", "girth"=>"skinny", "onion"=>true},
 {"darco"=>"johnson", "girth"=>"wide", "onion"=>false},
  {"flarco"=>"kiwi", "birth"=>"noble", "onion"=>false}
]

array.find{|i| i["onion"] }.keys[0]
# => "marco"
于 2013-06-17T14:03:21.270 に答える