我到处搜索,似乎无法找到我正在寻找的例子。我正在尝试学习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
}
如果我要使用此代码并输入“dog” 该脚本将返回 狗 狗
但我需要输出返回单词,即使它们的顺序不同。喜欢... 狗 狗 rodge
对于草率的代码感到抱歉。就像我说的还在学习。谢谢你的帮助。
PS。我也试过这个......
File.open("dictionary.txt").each { |line|
if line =~ /[characterArray[0..characterArray.size]]/
puts line;
end
}
但这将返回包含用户输入的任何字母的所有单词
答案 0 :(得分: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
- line
中找到的字符,false
- 未找到字符。此数组的长度等于characters
中的字符数。如果没有line
值,我们会考虑false
。