好的,我有一个键的散列,其中每个键包含多个值。我试图创建新的文件,关键是文件名和值被写入文本的同时(每行一个值)。这是我得到的。
@agencyList.each do |domain, email|
File.open(domain.to_s, "w") { |file| file.write(email) }
end
问题是只有value set的第一个元素被输出到文件。什么好主意吗?
正如我正确理解的那样,@agencyList
是Hash
es的数组。例如:
@agencyList = [
{domain: 'domain1', email: 'email11'},
{domain: 'domain1', email: 'email12'},
{domain: 'domain2', email: 'email21'},
]
所以在这种情况下File.open(domain.to_s, "w")
有不正确的文件模式。w
将重新创建一个新文件,因此该文件将始终只包含一个值-最后一个。
尝试使用a
模式打开文件,并通过puts
写入行,以确保值将在单独的行上:
@agencyList.each do |hash|
File.open(hash[:domain].to_s, "a") { |file| file.puts(hash[:email]) }
end
或
但是如果你说
我有一个散列,其中每个键包含多个值
一个Hash
不能包含相同键的值。所以你的@agencyList
是一个Hash
,应该有一个数组值:
@agencyList = {
'key1' => ['val11', 'val12'],
'key2' => ['val21'],
]
如果是这样,你的代码应该是这样的:
@agencyList.each do |domain, emails|
File.open(domain.to_s, "w") do |file|
emails.each do |email|
file.puts(email)
end
end
end
您需要遍历电子邮件集
domains.each { |domain, emails|
File.open(domain, 'w'){ |f|
emails.each { |email|
f.puts(email)
}
}
}