在Ruby中拆分数组

时间:2013-04-04 22:51:28

标签: ruby-on-rails ruby ruby-on-rails-3 mysql2

我从我的ruby文件中获取数据库中的一些数据:

@main1= $connection.execute("SELECT * FROM builds 
                WHERE   platform_type LIKE 'TOTAL';")

@main2= $connection.execute("SELECT * FROM builds 
                WHERE   platform_type NOT LIKE 'TOTAL';")

执行此操作后,我会对这些结果执行散列处理和其他一些操作。要清楚,这不会返回一个数组,但它会返回一些mysql2类型的对象。所以我只是将它映射到2个阵列是安全的:

@arr1 = Array.new
@arr1 = @main1.map

@arr2 = Array.new
@arr2 = @main2.map

有没有办法避免执行2个不同的查询,并通过只执行一个查询将所有结果都放在2个不同的数组中。我基本上想把结果拆分成2个数组,第一个数组有platform_type = TOTAL,另一个有其他数据。

2 个答案:

答案 0 :(得分:2)

同样没有说明你为什么要做你正在做的事情,我会这样使用Enumerable#partition

rows = $connection.execute('SELECT * FROM builds')
like_total, not_like_total = rows.partition { |row|
  row['platform_type'] =~ /TOTAL/
}

请注意,IIRC,SQL LIKE 'TOTAL'与Ruby的"string" =~ /TOTAL/不同(在SQL中更像LIKE '%TOTAL%' - 我不确定你需要什么。)

答案 1 :(得分:1)

要回答您的问题而不了解您为什么这样做:

使用额外的条件在一个查询中全部返回它们,然后您可以使用group_by将它们分组:

all_results = $connection.execute("SELECT *, platform_type LIKE 'TOTAL' as is_like_total FROM builds").

这会为您的每个结果提供一个' is_like_total' "柱"你可以分组了。

http://ruby-doc.org/core-2.0/Enumerable.html#method-i-group_by