【问题标题】:Converting a mysql2 type to an array and sorting it in ruby将 mysql2 类型转换为数组并在 ruby​​ 中对其进行排序
【发布时间】:2012-10-09 06:26:03
【问题描述】:

我的 ruby​​ 文件中有一个查询:

@mastertest = connection.execute("select code_ver,date from mastertest")

我将查询结果打印如下:

@mastertest.each do |row|
  puts row[0] : row[1]
end

这将打印所有的code_ver 和“日期”,看起来像这样

2.0 : 2012/12/10
3.1 : 2012/11/03
2.5 : 2012/07/08
1.8 : 2012/12/11
2.5 : 2012/03/01

现在我想根据我的code_ver 对这个数组进行排序,但问题是 ruby​​ 不认为这是一个数组,它说它是一些 mysql2 类型。

我该如何继续?我想要么把这个东西转换成二维数组,要么我想根据row[0]对其进行排序。

【问题讨论】:

    标签: mysql ruby-on-rails ruby arrays ruby-on-rails-3


    【解决方案1】:

    您在@mastertest 中获得了一个 MySQL 结果集对象,而结果集不是一个数组。

    如果你使用mysql2,那么你应该有一个Mysql2::Result,那就是Enumerable,所以它有一个to_a方法:

    @mastertest.to_a.sort { ... }
    

    如果您使用的是mysql gem,那么您应该有一个Mysql::Result,并且您必须手动将@mastertest 转换为一个数组:

    a = [ ]
    @mastertest.each { |r| a.push(...) }
    a.sort { ... }
    

    或者您可以简单地让数据库进行排序:

    @mastertest = connection.execute('select code_ver, date from mastertest order by code_ver')
    

    【讨论】:

    • 嘿,我想使用第二种方法,我手动创建一个数组。你能帮我解释一下转换的语法吗?
    • 甚至在第一种方法中,当我执行类似 @mastertest.to_a.sort { ... } 之类的操作时。如果我想在查询中对我的 row[0] 或 code_ver 进行排序,括号内应该是什么。
    • @sgarvikani:我不确定您希望您的阵列是什么样子,所以我不知道“手动”方法会是什么样子。在控制台中尝试@mastertest.to_a 版本,您会看到数组长什么样,然后您可以填写sort 块(或者甚至可以使用sort_by)。
    • 我基本上想要一个二维数组,它应该是这样的 temp = [{code_ver, date}, {coder_ver, date} , ...... ]
    • 那你可以a.push([r[0], r[1])或者a.push({ :code_ver => r[0], :date => r[1] })
    猜你喜欢
    • 2016-09-13
    • 2020-09-30
    • 2020-12-05
    • 2011-06-23
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    相关资源
    最近更新 更多