2012-05-13 36 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

相关问题