2012-05-13 38 views
4

我已經到處搜索並且似乎無法找到我正在尋找的示例。我試圖學習紅寶石,我正在寫一個簡單的腳本。提示用戶輸入加載到數組中的字母。然後,腳本通過一個包含一堆單詞的文件,並提取包含數組內容的單詞。我的問題是,如果它們按照數組的順序,它只會將單詞拉出來。例如...Ruby-找到包含數組中字母的字符串

characterArray = Array.new; 
puts "Enter characters that the password contains"; 
characters = gets.chomp; 
puts "Searching words containing #{characters}..."; 

characterArray = characters.scan(/./); 
searchCharacters=characterArray[0..characterArray.size].join; 

File.open("dictionary.txt").each { |line| 
    if line.include?(searchCharacters) 
     puts line; 
    end 
} 

如果我是用這個代碼,並輸入「狗」 該腳本將返回 狗 小狗

,但我需要的輸出返回即使他們的話不按照相同的順序。喜歡... 狗 doggie rodge

對不起,這個草率的代碼。就像我說的還在學習。謝謝你的幫助。

PS。我也試過這個...

File.open("dictionary.txt").each { |line| 
    if line =~ /[characterArray[0..characterArray.size]]/ 
     puts line; 
    end 
} 

但這返回包含任何用戶輸入

+0

而不是將搜索字詞存儲爲''dog'',將其存儲爲''d','o','g',然後檢查搜索數組中的每個字母是否在單詞中看着。 –

+0

文件中的每一行是否只包含一個單詞? –

+0

是的。每行只有一個字 – user1392440

回答

3

首先字母的所有的話,你不需要自己創建characterArray。當你將函數的結果賦值給一個新的變量時,它將在沒有它的情況下工作。

在您的代碼characters將是,例如,「asd」。 characterArray然後將是[「a」,「s」,「d」]。並且searchCharacters將再次「asd」。看起來你不需要這種轉換。

characterArray[0..characterArray.size]正好等於characterArray

您可以使用each_char迭代器遍歷字符串的字符。我建議這樣:

puts "Enter characters that the password contains"; 
characters = gets.chomp; 

File.open("dictionary.txt").each { |line| 
    unless characters.each_char.map { |c| line.include?(c) }.include? false 
    puts line; 
    end 
} 

我已經檢查過它的工作是否正常。在我的代碼我做一個數組:

characters.each_char.map { |c| line.include?(c) } 

這個數組的值將表明:true - 在linefalse發現性格 - 性格沒有找到。此數組的長度等於characters中的字符數。如果沒有false的值,我們會考慮line

+0

非常有幫助。正是我在找什麼。謝謝。 – user1392440

相關問題