Sql 正在寻找一种从要插入的数组散列中获取的巧妙方法

Sql 正在寻找一种从要插入的数组散列中获取的巧妙方法,sql,arrays,ruby,hash,Sql,Arrays,Ruby,Hash,我有一些例程,它们将数据刮到大小相等的数组的散列中,每个数组最终都对应于一个数据库列,其名称对应于键 test_hash = { a: [1,2,3], b: [4,5,6], c: [7,8,9] } 我需要插入到SQLITE3数据库中,因此我需要迭代以下内容(本例中为3次) 我只需花点时间就能拿到钥匙 test_hash.keys 但我无法在块内获取可见的索引,以获取值 3.times do |n| test_hash.collect { |x| x.last[n] }

我有一些例程,它们将数据刮到大小相等的数组的散列中,每个数组最终都对应于一个数据库列,其名称对应于键

test_hash = {
  a: [1,2,3],
  b: [4,5,6],
  c: [7,8,9]
}
我需要插入到SQLITE3数据库中,因此我需要迭代以下内容(本例中为3次)

我只需花点时间就能拿到钥匙

test_hash.keys
但我无法在块内获取可见的索引,以获取值

3.times do |n|
  test_hash.collect { |x| x.last[n] }
end
我注意到,当作为x推入块时,散列条目被映射到由两个元素组成的数组。第一个元素是散列的键,第二个元素是数组的键,因此是.last。对于记录,如果我在块中用0、1或2替换n,我将得到我正在寻找的适当格式行

我可以看到一些类似于数据表的应用程序也能够做到这一点。这里的方法是什么

谢谢

我会将转换用于输入,然后对其进行迭代:

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

简单!谢谢,斯皮克曼。我没有想到转置法,因为我的大脑有杂凑。
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