2012-10-18 18 views
5

排序它,我有一個查詢我的ruby文件:轉換一個mysql2類型的數組和紅寶石

@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 

現在我想根據我這個數組排序,但問題是ruby並不認爲這是一個數組,它說它是一些mysql2類型。

我該如何繼續?我想要將這個東西轉換爲二維數組,或者我想根據row[0]對它進行排序。

回答

7

您正在獲取@mastertest中的MySQL結果集對象,並且結果集不是數組。

如果您使用mysql2,那麼你應該有一個Mysql2::Result,這就是Enumerable所以它有一個to_a方法:

@mastertest.to_a.sort { ... } 

如果您使用的mysql寶石,那麼你應該有一個Mysql::Result和你必須手工@mastertest轉換爲數組:

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

或者你可以讓數據庫做了排序:

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

嘿我想用第二種方法,我手工創建一個數組。你能幫助我轉換的語法嗎? –

+0

甚至在第一種方法中,當我做一些類似於**@mastertest.to_a.sort {...} **的事情。如果我想在我的查詢中對我的行[0]或code_ver進行排序,那麼括號內應該包含什麼內容。 –

+0

@sagarvikani:我不確定你想讓你的數組看起來像,所以我不知道「手工」方法會是什麼樣子。在控制檯中試用'@ mastertest.to_a'版本,你會看到數組的樣子,然後你可以填入'sort'模塊(或者甚至可以使用'sort_by')。 –