首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Create hash with keys是表名,值是列名

Create hash with keys是表名,值是列名
EN

Stack Overflow用户
提问于 2018-03-21 03:44:10
回答 1查看 378关注 0票数 2

我想要迭代一个具有数据库表名的数组,我想创建一个这样的散列:

代码语言:javascript
复制
{"table1"=>[column1,...,columnN],"table2"=>[column1,...,columnM]...}

这就是我到目前为止所做的:

代码语言:javascript
复制
arr_table_names = ['table1','table2','table3']

arr_table_names.each do |table|  
 rs = pg_conn.exec 'SELECT * FROM table WHERE Id=0'
 column_names = rs.nfields
   h = Hash.new{|hsh,key| hsh[key] = [] }
   h[table].push ??? column_names ?? I don't know how in this line

end

我尝试使用Sebastian的解决方案,但得到了一个语法错误:

代码语言:javascript
复制
def check_tables_same_content(table1,table2)
   result = %w[#{table1} #{table2}].each_with_object([]) do |table, arr|
    arr << { table.to_sym => @pg_conn.exec("SELECT * FROM #{table} WHERE false").fields }
   end
   puts result2    
 end  
check_tables_same_content('company','company2')

company.rb:21:in `exec': ERROR:  syntax error at or near "#" (PG::SyntaxError)
LINE 1: SELECT * FROM #{table1} WHERE false
                  ^

请注意,我不是在研究如何返回列名。

EN

回答 1

Stack Overflow用户

发布于 2018-03-21 04:12:28

使用.map创建一个新数组并传递块。这应该是可行的:

代码语言:javascript
复制
arr_table_names.map do |table|  
    rs = pg_conn.execute "SELECT * FROM #{table} WHERE Id=0"
    {table => rs.fields}
end

Update,您想要一个以表名作为键,列作为值的散列,因此:

代码语言:javascript
复制
arr_table_names = ['table1','table2','table3']
hash = {}
arr_table_names.each do |table|  
    rs = pg_conn.execute "SELECT * FROM #{table} WHERE Id=0"
    hash[table] = rs.fields
end

更新2,您希望将行数据作为散列中每一列(键)的数组:

代码语言:javascript
复制
arr_table_names = ['table1','table2','table3']
hash = {}
arr_table_names.each do |table|  
  rows = pg_conn.execute "SELECT * FROM #{table}"
  hash[table] = rows.entries.map(&:values)
end
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49392901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档