2016-10-07 16 views
-1

Rubyハッシュから返す値を宣言的に指定したいと考えています。理想的には、私は与えられたハッシュに対して実行できるクエリを書くことができ、そのクエリをオブジェクト(文字列、ハッシュなど)として格納することができます。Rubyの宣言型ハッシュクエリ

# for example 
hash = { 
    key1: { 
    key2: [ 
     { a: 1, b: 2 } 
    ] 
    } 
} 
query = { path: ["key1", "key2"], key: :a, where: { b: 2 } } 

Library.query(query, hash) #=> 1 

私はこのために良いライブラリを見つけることができませんでした。このようなRubyハッシュをクエリする良い方法はありますか?構文はそれほど素敵ではありませんが

+0

トピックではない解決策をお勧めします。 "[ask]"とリンクされたページが役立ちます。 「Stack Overflowのための本やツール、ソフトウェアライブラリ、チュートリアル、その他のオフサイトリソースをお薦めするかどうかを尋ねる質問は、オピニオン回答とスパムを引き付ける傾向があるため、 //meta.stackoverflow.com/questions/254393)、それを解決するためにこれまでに何が行われているのか」 –

答えて

0

、これは(私が思う)明示的なループや条件分岐せずに何をしたいん:あなたはあなたができる変数でクエリを保存したい場合は

>> require 'deep_enumerable' 

>> hash.deep_get(:key1 => :key2) 
     .find{|h| h[:b] == 2} 
     .fetch(:a) 

=> 1 

このように:

これは最高のハックですが、一般的には生産品質ではありませんが、解決策です。

+0

それはかなり良いですが、私が探しているように宣言的ではありません。クエリの詳細をオブジェクトに格納することができれば、私のニーズを満たすことができます。私はそれをより具体的にするために私の質問を更新しました。 – steel

+0

私はあなたを聞いています。それは素晴らしいだろう。 – user12341234