Ruby对单个键遍历多个值



好的,我有一个键的散列,其中每个键包含多个值。我试图创建新的文件,关键是文件名和值被写入文本的同时(每行一个值)。这是我得到的。

    @agencyList.each do |domain, email|
        File.open(domain.to_s, "w") { |file| file.write(email) }
    end

问题是只有value set的第一个元素被输出到文件。什么好主意吗?

正如我正确理解的那样,@agencyListHash 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)
      }
   }
}

相关内容

  • 没有找到相关文章

最新更新