我将一个单词列表的比较移动到一个文本文件,我现在尝试在每一行使用IO.gets
。这完全改变了我的结果。
基本上我正在使用Trie来判断一个单词中是否有前缀 - 现在我的输出只显示前缀,这意味着它们都没有正确“匹配”并且默认返回所有前缀。
这是编码问题还是正在发生什么?
以下是我所说的具体代码 - 而不是:
sources = ['Bash', 'cplusplus', 'java', 'javascript', 'php', 'python', 'ruby']
prefixes = ['ab', 'ba', 'bu', 'Jav', 'ph', 'ru', 'ze']
我现在这样做:
def fileList(dir, array)
file = File.new(dir, "r")
while (line = file.gets)
array << line
end
end
sources = Array.new
prefixes = Array.new
fileList("../lists/sources.list", sources)
fileList("../lists/prefixes.list", prefixes)
每个元素在文本文件中都有自己的行
https://github.com/jphenow/merge_prefix/tree/master/ruby
非常感谢您的帮助!
答案 0 :(得分:1)
试试这个:
def file_list(dir, array)
Dir.chdir dir
Dir.glob("*").each{|file| array << file}
end
一个方法改变一个变量的值是不寻常的,但是由于数组#&lt;&lt;的奇怪之处,它会发生。该方法返回值更为常见:
def file_list(dir, array)
Dir.chdir dir
array + Dir.glob("*")
end
sources = fileList("./somedir", sources)
答案 1 :(得分:1)
目前还不清楚你要完成什么,但是这里是如何读取文件行并将它们附加到数组中,这是一项常见的任务:
源文件如下所示:
的sources.list:
Bash
cplusplus
java
javascript
php
python
ruby
和
prefixes.list:
ab
ba
bu
Jav
ph
ru
ze
代码如下:
require 'pp'
def fileList(dir, array)
array += File.readlines(dir).map(&:chomp)
end
sources = Array.new
prefixes = Array.new
pp fileList("sources.list", sources)
pp fileList("prefixes.list", prefixes)
=> ["Bash", "cplusplus", "java", "javascript", "php", "python", "ruby"]
=> ["ab", "ba", "bu", "Jav", "ph", "ru", "ze"]