我正在创建一个数组: 哈希所有的话 在所有段落数组中 对于文件夹中所有文件的数组
我相信我在所有段落的数组中都有所有单词的哈希值。但要为每个文件执行此操作,并为每个文件创建特定的密钥,这是一个过头的桥梁。
到目前为止,这是我的代码。在为文件夹中的所有文件创建唯一数组时出错,并将该文件的所有段落数组放入文件数组中。
numberfiles = Dir.glob(File.join('**', '*')).select { |file| File.file?(file) }.count
countfiles+1
# HERE I MAKE THE ARRAY FOR ALL FILES
filesArray = Array.new(numberfiles.to_i, Hash.new)
for j in 0...numberfiles.to_i do
filesArray[j] = Hash.new
end
#now to open all textfiles..
Dir.glob("*.txt").each do |textfile|
lines = File.readlines(textfile)
text = lines.join
paragraph_count = text.split("\.\r").length
#create array with key for every paragraph
testArray = Array.new(paragraph_count.to_i, Hash.new)
for $i in 0...paragraph_count.to_i do
testArray[$i] = Hash.new
end
words_in_each_paragraph = Array.new
i = 0
这里我想将所有的testarray保存到文件阵列中。这不起作用:
File.foreach(textfile, "\.\r") do |paragraph|
word_hash = {}
paragraph.split(/\W+/).each_with_object(word_hash) { |w, h|
h[w] = []
}
words_in_each_paragraph << word_hash
testArray[i][:value] = word_hash
filesArray[j][:file] = testArray # HERE IT GOES WRONG
i += 1
end
puts filesArray[1]
end
答案 0 :(得分:2)
我不完全确定你要做什么,但我知道你不必在Ruby中预先分配数组的大小。下面的代码遍历每个.txt文件,将它们分成段落,并将这些段落中的每个单词放在哈希中。该字哈希附加到paragraph数组,而该数组又附加到files数组。
files = []
Dir.glob("*.txt").each do |textfile|
paragraphs = []
File.foreach(textfile, "\n\n") do |paragraph|
words = Hash.new(0)
paragraph.split(/\W+/).each {|word| words[word] += 1}
paragraphs << words
end
files << paragraphs
end
p files
答案 1 :(得分:2)
如果你想对可枚举的每个元素做一些事情并将结果存储在一个数组中,那么请考虑map
。
result = Dir.glob("*.txt").map do |textfile|
File.read(textfile).split("\n\n").map do |paragraph| #again!
words = Hash.new(0)
paragraph.split(/\W+/).each {|word| words[word] += 1} #copied from @Jonas Elfström
end
end
p result