我试图读取一个文本文件,然后将其单独的单词存储在一个数组中。但我找不到一种方法来根据文字来分割它。
text_file = [] File.open(file, "r") do |f| f.lines.each do |line| text_file << line.split.map(&:to_s) end end
上面的方法创建了一个数组的数组,它将所有单词存储在数组中的一行中,依此类推。有没有一种方法可以让数组text_file保存一个包含所有单词的数组?
text_file
yptwkmov1#
是的。要么:
text_file.push(*line.split.map(&:to_s))
或:
text_file.concat(line.split.map(&:to_s))
ldfqzlk82#
如果你想要所有的单词,唯一的,排序:
text_file = [ ] File.open(file, "r") do |f| f.each_line do |line| text_file += line.split end end text_file.uniq! text_file.sort!
这不是最佳的实现,但它应该工作。为了适应更真实的情况,你可能需要使用String#scan来提取更具体的单词,而不是被标点符号或连字符之类的东西绊倒。
String#scan
wljmcqd83#
修改你的代码,这将做到这一点:
text_file = [] File.open('document.rb', "r") do |f| f.each_line do |line| arr = line.split(' ') arr.each do |word| text_file << word end end end
ezykj2lf4#
下面的代码读取file的内容,拆分由空格分隔的行和单词,然后通过冻结结果来创建一个名为WORDS的常量。
file
WORDS
WORDS = File.read(file).split(/[ \n]/).freeze
如果您还想使用制表符以及空格和换行符作为分隔符,请使用以下内容:
WORDS = File.read(file).split(/[ \n\t]/).freeze
4条答案
按热度按时间yptwkmov1#
是的。要么:
或:
ldfqzlk82#
如果你想要所有的单词,唯一的,排序:
这不是最佳的实现,但它应该工作。为了适应更真实的情况,你可能需要使用
String#scan
来提取更具体的单词,而不是被标点符号或连字符之类的东西绊倒。wljmcqd83#
修改你的代码,这将做到这一点:
ezykj2lf4#
下面的代码读取
file
的内容,拆分由空格分隔的行和单词,然后通过冻结结果来创建一个名为WORDS
的常量。如果您还想使用制表符以及空格和换行符作为分隔符,请使用以下内容: