好的,所以我有一个带有键的哈希值,其中一些键包含每个键的多个值。我正在尝试创建新文件,其中键是文件名和值写入文本(每行一个值)。这就是我得到的。
@agencyList.each do |domain, email|
File.open(domain.to_s, "w") { |file| file.write(email) }
end
问题是只将值集的第一个元素输出到文件中。有什么想法吗?
答案 0 :(得分:2)
据我所知,@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
答案 1 :(得分:0)
您需要遍历电子邮件集
domains.each { |domain, emails|
File.open(domain, 'w'){ |f|
emails.each { |email|
f.puts(email)
}
}
}