【问题标题】:Ruby Mysql2 return result hash using symbols instead of strings as keysRuby Mysql2 使用符号而不是字符串作为键返回结果哈希
【发布时间】:2014-06-19 17:30:54
【问题描述】:

我正在将 Mysql2 Gem 与 Ruby 一起使用,我将结果转换为哈希使用

sql = "SELECT * FROM ... WHERE ... "

results = ActiveRecord::Base.connection.execute(sql)

results.each(:as => :hash) do |row|
  finalresults << row
end

但这会返回以字符串为键的散列。我想要的是散列使用符号作为键,因为我听说通常符号更有效。任何人都知道如何以一种不涉及在返回结果后循环键的有效方式执行此操作吗?请注意,我的一些查询可能会产生大量数据。

所以,而不是

{'id'=>19201, 'name'=>'Foo', 'age'=>30}

我想要,

{:id=>19201, :name=>'Foo', :age=>30}

提前致谢

【问题讨论】:

    标签: ruby hashmap mysql2


    【解决方案1】:

    您可以使用Hash#with_indifferent_access。虽然我不确定是否有办法让results 被自动无差别地访问,但很可能这就是它的底层实现方式,因此不会造成性能损失。

    results.each(:as => :hash) do |row|
      finalresults << row.with_indifferent_access
    end
    

    【讨论】:

      【解决方案2】:

      使用“symbolize_keys”标志可能会获得更好的性能。以下是文档中的示例:

      client.query("SELECT * FROM users WHERE group='githubbers'", :symbolize_keys => true)
      

      【讨论】:

        猜你喜欢
        • 2018-10-17
        • 2021-11-19
        • 2020-04-05
        • 1970-01-01
        • 2015-11-23
        • 2015-04-13
        • 1970-01-01
        • 2021-10-01
        • 2017-10-02
        相关资源
        最近更新 更多