2012-05-07 119 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不是一個可鏈接的方法(返回值是您要刪除成功的對象,或者零如果不找到; 不是修改後的數組)。爲了簡化您的代碼,只需使用reject

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

啊!這將解釋它! 我可以將{nilfacs}轉換爲數組並將其與拒絕一起使用嗎? 我需要能夠拒絕任何包含nilfac列表中只有1個表達式的句子,這是讓我把頭髮撕掉幾天的部分。並感謝您的時間! – Thomas

+0

當然,只要將nilfacs作爲一個數組開頭('nilfacs = []')並附加到它,而不是進行字符串連接('nilfacs << fac'而不是'nilfacs =(nilfacs + fac +'')') 。然後你可以在'reject'塊中使用['any?'](http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-any-3F)。 –

+0

期待明天嘗試。真的很感謝幫助! – Thomas