Ruby-查找包含数组中字母的字符串

时间:2012-05-13 18:05:42

标签: ruby arrays

我到处搜索,似乎无法找到我正在寻找的例子。我正在尝试学习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
}

但这将返回包含用户输入的任何字母的所有单词

1 个答案:

答案 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