2012-05-07 16 views
0

Array.selectを使用して、不要なアイテムを含むデータベースから文字列を分離して削除しようとしています。私はエラーはありませんが、これは期待どおりに動作していないようです。array.selectの構文は何ですか?

関連するコードは、最後の部分である:

totaltext = [] 
masterfacs = '' 
nilfacs = '' 

roomfacs_hash = {'lcd' => lcd2, 'wifi'=> wifi2, 'wired' => wired2, 'ac' => ac2} 
roomfacs_hash.each do |fac, fac_array| 
    if roomfacs.include? (fac) 
    totaltext = (totaltext + fac_array) 
    masterfacs = (masterfacs + fac + ' ') 
    else 
    nilfacs = (nilfacs + fac + ' ') 
    end 
end 

finaltext = Array.new 
text_to_delete = totaltext2.select {|sentences| sentences =~ /#{nilfacs}/i} 
finaltext = totaltext2.delete (text_to_delete) 
puts finaltext 
+0

間違いがないですか?本当に? – steenslag

+0

時間をかけてコードをインデントしてください。 – meagar

+0

Steenslag:うん、それを実行するとエラーはありません Meagar:申し訳ありません!インデントされていますが、貼り付けて投稿しようとすると、「4つのスペースを超えました!と私はそれがコードのすべての行に意味だと思った... – Thomas

答えて

0

deleteはチェーン可能メソッド(戻り値は、あなたが成功を削除しようとしているオブジェクトである、またはnilでない場合ではないので、それはおそらく働いていません見つけた; でない変更された配列)。コードを簡略化するには、reject

finaltext = totaltext.reject{|sentence| nilfacs.any?{|fac| sentence =~ /#{fac}/i } } 
+0

ああ!それはそれを説明するだろう! {nilfacs}を配列に変換し、それを拒否とともに使用できますか? nilfacリストから1つだけfacを含む文章を拒否できる必要があります。これは、私の髪を何日も断ち切ってしまった部分です。そして、あなたの時間をありがとう! – Thomas

+0

もちろん、nilfacsを( 'nilfacs = []')で始まり、文字列連結( 'nilfacs =(nilfacs + fac + '')ではなく' nilfacs << fac') 。その後、 'reject'ブロックの中で[' any? '](http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-any-3F)を使うことができます。 –

+0

明日これを試すのを楽しみにしています。本当に助けに感謝! – Thomas