正如我正确理解的那样,@agencyList 是Hashes 的数组。例如:
@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