【问题标题】:Formatting data array with ruby用 ruby​​ 格式化数据数组
【发布时间】:2014-04-10 13:07:23
【问题描述】:

我正在尝试使用 ruby​​ 从 PostgreSQL 获取数据并将它们存储到一个数组中,因为我有一个小脚本:

脚本:

require 'pg'  

conn=PGconn.connect( :hostaddr=>"192.168.111.136", :port=>5432, :dbname=>"sentinel_poc",:user=>"sdn_mehdi", :password=>'skyline123')  

res = conn.exec("SELECT dns_name FROM dns_table group by dns_name").to_a  

a_dns = []  

res.each { |r| a_dns << r }  
puts a_dns.join(",")  

结果是:

{"dns_name"=>"youtube.com                                       "},{"dns_name"=>"stackoverflow.com                                         "},{"dns_name"=>"cisco.com                                         "},{"dns_name"=>"facebook.com                                      "},{"dns_name"=>"yahoo.com                                         "},{"dns_name"=>"onf.com                                           "},{"dns_name"=>"safe.com                                          "},{"dns_name"=>"linkedin.com                                      "},{"dns_name"=>"amazon.com                                        "},{"dns_name"=>"google.com                                        "},{"dns_name"=>"java.com                                          "},{"dns_name"=>"live.com                                          "},{"dns_name"=>"rails.com                                         "},{"dns_name"=>"postgresql.com                                    "},{"dns_name"=>"hp.com                                            "},{"dns_name"=>"wikipedia.org                                     "}

我需要的只是每个域名的名称!类似{"youtube.com","google.com","java.com","rails.com","hp.com"}

任何建议将不胜感激。

【问题讨论】:

  • 你期望的结果 ({"youtube.com","google.com",...}) 在 Rails 中不存在,它看起来像一个哈希但只有键(或值?)。你的意思是像一个dns名称数组吗?或包含:dns_name =&gt; string_of_dns_name 的哈希数组?
  • 类似于 dns 名称的数组!

标签: ruby-on-rails arrays ruby postgresql


【解决方案1】:

我认为你需要:

res.flat_map(&:values)
# or if you have hashes having size more then 1, then use the below
res.map { |h| h["dns_name"] }
# to strip leading and trailing whit spaces
res.map { |h| h["dns_name"].strip }

【讨论】:

  • @midobAck 请更具体一些,什么不起作用?
  • 我尝试了你所有的建议,但我得到的结果和以前一样!
  • @midobAck 明白你的意思.. 做res.map! { |h| h["dns_name"].strip }
【解决方案2】:

只取你的代码,做一些小的改动,我想下面的代码对你有用

a_dns = []  

res.each { |r| a_dns << r.values[0].strip }  
puts a_dns

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2020-08-19
    • 2020-04-02
    • 1970-01-01
    • 2023-02-21
    相关资源
    最近更新 更多