2017-03-17 14 views
0

私は巨大な配列のハッシュの束でいっぱいです。私がする必要があるのは、特定の基準を満たす配列から1つのインデックスハッシュを取り出すことです。特定の条件を満たす配列で特定のハッシュを取得する

私の配列は、私はその資格の設定に基づいて、第2の1を、選び出す必要があり、この

[ 
    { 
         "name" => "jon doe", 
        "team" => "team2", 
        "price" => 2000, 
     "eligibility_settings" => {} 
    }, 
    { 
         "name" => "jonny doe", 
        "team" => "team1", 
        "value" => 2000, 
     "eligibility_settings" => { 
        "player_gender" => male, 
        "player_max_age" => 26, 
        "player_min_age" => 23, 
      "established_union_only" => true 
     } 
    }, 
    { 
         "name" => "jonni doe", 
        "team" => "team3", 
        "price" => 2000, 
     "eligibility_settings" => {} 
    }, 
] 

のようなものです(これはRSpecのテストにこれをやってますが、そのうちの一つを選び出し悩みを持ちます)。私はちょうど私の配列からそれらの3つを取った、もっとたくさん持っているので、(hash.second)のような単純なアクティブなレコードメソッドはこのインスタンスでは動作しません。

私はしかし、私はこれをしようとすると、私はnil応答を取得

players.team.map(&:hash).find{ |x| x[ 'eligibility_settings?' ] == true} 

のようなものを試してみました。

(奇数である)私も、どこでも私を得ていなかったルビーdetect方法、

Players.team.map(&:hash).['hash.seligibiltiy_settings'].detect { true } 

誰もがこの1をどうするか任意のアイデアを持っているだろういずれかを使用してに見てきましたか?

答えて

0

ノート

players.team.map(&:hash).find{ |x| x[ 'eligibility_settings?' ] == true} 
Players.team.map(&:hash).['hash.seligibiltiy_settings'].detect { true } 
  • されplayersPlayersのですか?
  • なぜ複数ですか?
  • teammapを呼び出すことができる場合は、おそらく複数である必要があります。
  • なぜハッシュに変換しますか?
  • eligibility_settings?はハッシュのキーではありません。

    eligibility_settingsは、ハッシュすることができますが、あなたはそれが空でないかどうかを確認したい場合は、true
  • することはできません、!h['eligibility_settings'].empty?

解決策あなたが使用することができ

を使用

  • eligibility_settingsです
    data = [ 
        { 
        'name' => 'jon doe', 
        'team' => 'team2', 
        'price' => 2000, 
        'eligibility_settings' => {} 
        }, 
        { 
        'name' => 'jonny doe', 
        'team' => 'team1', 
        'value' => 2000, 
        'eligibility_settings' => { 
         'player_gender' => 'male', 
         'player_max_age' => 26, 
         'player_min_age' => 23, 
         'established_union_only' => true 
        } 
        }, 
        { 
        'name' => 'jonni doe', 
        'team' => 'team3', 
        'price' => 2000, 
        'eligibility_settings' => {} 
        } 
    ] 
    
    p data.find { |h| !h['eligibility_settings'].empty? } 
    
    # {"name"=>"jonny doe", "team"=>"team1", "value"=>2000, "eligibility_settings"=>{"player_gender"=>"male", "player_max_age"=>26, "player_min_age"=>23, "established_union_only"=>true}} 
    

    h['eligibility_settings']には、nilを指定できます。

    data.find { |h| !h['eligibility_settings'].blank? } 
    

    または

    data.find { |h| h['eligibility_settings'].present? } 
    
  • +0

    すごいです。非常に徹底的な答え。これを手伝ってくれてありがとう。間違いなく役立ち、私はあなたのアプローチについて少し学んだ。ありがとうございました! – kdweber89

    関連する問題