在 Ruby 中循环分配数组值的一组哈希的更好方法

Better way to loop through a set of hashes assigning array values in Ruby

我正在尝试将数据插入 Postgres。我有一个数据数组,我试图为每一列分配一个数组值。这是一个例子。

pg_insert = ['12/09/2015', 41, 'test account', '41.0']
Table.create([date: pg_insert[0],
            account_number: pg_insert[1],
            account_name: pg_insert[2],
            values: pg_insert[3]])

有没有办法让我循环这个,这样我就可以把 i 放在 pg_insert 而不必输入数字?我不确定如何在 create() 参数内部循环。有什么解决办法吗?

如有任何建议,将不胜感激。

Table.create 正在接受哈希,我确定。

因此,您可以执行以下操作:

  1. 创建一个名为 keys 的数组,其中包含 4 个符号 :date:account_number:account_name:values
  2. pg_insert 已经是一个数组。
  3. 现在你可以把两个Array放在一起做你需要的Hash:Hash[keys.zip(pg_insert)]
  4. 这允许您像这样调用 Table.createTable.create(Hash[keys.zip(pg_insert)])

完成代码如下:

keys = [:date, :account_number, :account_name, :values]
pg_insert = ['12/09/2015', 41, 'test account', '41.0']
Table.create(Hash[keys.zip(pg_insert)])  # or Table.create Hash[keys.zip(pg_insert)]  if you don't want so many parentheses.

请注意,pg_insert 的顺序必须始终与 keys 的顺序相同。

您可以阅读有关 Array#zip 和 Hash.new 的更多信息以了解它们的工作原理。这个 SO link 也可能有帮助:Converting an array of keys and an array of values into a hash in Ruby