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 dogge rodge

对不起,草率的代码。就像我说的还在学习。谢谢你的帮助。

PS。这个我也试过...

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

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

4

1 回答 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- 在 中找到字符linefalse- 未找到字符。此数组的长度等于 中的字符数charactersline如果没有false值,我们会认为是好的。

于 2012-05-13T18:25:14.537 回答