寻找一种从数组哈希到 INSERT 的巧妙方法

Looking for a slick way to get from a hash of array to INSERT

我有一些例程将数据抓取到大小相等的数组的散列中,每个数组最终对应一个数据库列,其名称与键相对应。

test_hash = {
  a: [1,2,3],
  b: [4,5,6],
  c: [7,8,9]
}

我需要插入 SQLITE3 数据库,所以我需要迭代以下内容(在本例中为 3 次)

INSERT INTO the_table ['a', 'b', 'c'] VALUES [1, 4, 7]

我可以简单地用

拿到钥匙
test_hash.keys

但我无法让索引在块内可见以获取值

3.times do |n|
  test_hash.collect { |x| x.last[n] }
end

我注意到当作为 x 推入块时,哈希条目被映射到一个包含两个元素的数组。第一个元素是散列的键,第二个元素是数组,因此是 .last。作为记录,如果我用 0,1 或 2 代替块中的 n,我会得到我正在寻找的适当格式的行。

我还可以看到一些数据 table,比如应用程序也能够做到这一点。这里的方法是什么?

谢谢!

我会使用 Array#transpose 转换输入,然后迭代它:

test_hash = {
  a: [1,2,3],
  b: [4,5,6],
  c: [7,8,9]
}

attributes = test_hash.values.transpose
#=> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

attributes.each do |attrs|
  # method to build the SQL insert statement with `attrs` as arguments
end