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

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
 }

如果我使用这段代码并输入“dog”,脚本将返回 dog doggie 但我需要输出结果返回单词,即使它们不是按相同的顺序。比如... dog doggie rodge 对于代码混乱的问题感到抱歉。就像我说的还在学习中。感谢您的帮助。
PS. 我也尝试过这个...
File.open("dictionary.txt").each { |line| 
    if line =~ /[characterArray[0..characterArray.size]]/
        puts line;
    end
}

但是这会返回所有包含用户输入的任意字母的单词。

不要将搜索项存储为"dog",而是存储为'd','o','g'并检查搜索数组中的每个字母是否在您正在查找的单词中。 - Hunter McMillen
文件中的每一行是否只包含一个单词? - Andrew Marshall
是的 - user1392440
1个回答

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中字符的数量。如果没有false值,我们将认为line是好的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接