匹配短語需要在比較某種方式匹配短語來哈希和搶ID:紅寶石 - 哈希
哈希:
h = [{'id' => '1', 'words' => 'blue table stand'}, {'id' => '2', 'words' => 'red table stand'}]
字:
search = 'stand blue'
我想返回那些有'stand'和'blue'字樣的人的ID,以便我找回ID號碼1.謝謝。
匹配短語需要在比較某種方式匹配短語來哈希和搶ID:紅寶石 - 哈希
哈希:
h = [{'id' => '1', 'words' => 'blue table stand'}, {'id' => '2', 'words' => 'red table stand'}]
字:
search = 'stand blue'
我想返回那些有'stand'和'blue'字樣的人的ID,以便我找回ID號碼1.謝謝。
我@sawa同意,該數據似乎並沒有在最舒適的方式形成,但你永遠不知道它是從哪裏來的?
無論如何,這應該工作:
search = "blue stand"
h.select{|x| search.split.all?{|s| x["words"].split.include? s } }.map{|x| x["id"] }
=> ["2"]
從下面的評論中,使用的字符串[]訪問使這個短,我恨足以更新滾動條:
h.select{|x| search.split.all?{|s| x["words"][s] } }.map{|x| x["id"] }
一個很好的答案,但它使用正則表達式更清晰:[/ blue /,/ stand /]。all?{| r | r =〜x ['words']} – pguardiario 2012-01-04 06:10:33
@pguardiario實際上,你不需要regexes(除非你想檢測字邊界):'%w [stand blue] .all?{| w | x [「words」] [w]}' – sawa 2012-01-04 06:57:17
@sawa這是真的,你可以在[]中使用字符串或正則表達式,但我喜歡=〜更好。 – pguardiario 2012-01-04 07:07:05
首先,你的'h'有一個錯誤的方法的氣味。你應該像'{1 =>%w [藍色桌臺],2 =>%w [紅色桌臺]}'。這更清晰,並會使其他方法更有效。 – sawa 2012-01-04 05:09:01