2013-06-19 126 views
-1

在Rails中,我试图创建二维,但在搜索很多时,我发现大多数人建议必须使用Array, HASHRails 3 +按年份排序的年份

这里我试图建立一个降序的年份数组,但我随机得到了这几年,所以我使用了数组排序。这里出现的问题是,我希望像每年的天数一样通过一年的价值。

所以,当排序时,我将失去另一个数组中存在的相关值。

例子:

year = ["1990", "1995", "2010", "1985" ] 
    days = [ '10', '20', '2', '50' ] 

现在我不能够日内每年降序排序。

回答

2

你的语法是有点过了......你需要打开一个紧密哈希有花括号:

{"1990" => '10', "1995" => '20', "2010" => '2', "1985" => '50'} 

基本上,你键控年与当年相关的天数。要使用密钥,您需要使用散列火箭(=>)来表示密钥和值。

然后,以降序的键的顺序(在你的情况下,一年)进行排序,你会以这种方式排序逆转:

hash = {"1990" => '10', "1995" => '20', "2010" => '2', "1985" => '50'} 

sorted = Hash[hash.sort.reverse] 
#=> {"2010"=>"2", "1995"=>"20", "1990"=>"10", "1985"=>"50"} 

最后,您可以通过访问天数同期:

sorted["1995"] #=> "20" 
sorted["1985"] #=> "50" 

或访问每一对顺序:

sorted.each do |k, v| 
    puts "Year: ".k." has ".v"\n" 
    puts "Now let's look at the previous year." 
end 

编辑:

如果你想两个数组一起合并成连续的键值对的哈希值,你可以做到以下几点:

years = ["1990", "1995", "2010", "1985"] 
days = ['10', '20', '2', '50'] 

Hash[*years.zip(days).flatten] 
#=> {"1990"=>"10", "1995"=>"20", "2010"=>"2", "1985"=>"50"} 
+0

我很努力将两个数组合并成哈希。我知道这种排序方法。 – Rubyist

+0

希望你在你的问题中提到过。我已经更新了我的答案,以演示如何将两个数组合并成一个哈希。 – zeantsoi

+0

谢谢我刚刚完成。 :) – Rubyist

0

一个很好的衬垫将是如下:

升序:

year = ["1990", "1995", "2010", "1985"] 
days = [ '10', '20', '2', '50' ] 

h = Hash[year.zip(days).sort] 
#=> {"1985"=>"50", "1990"=>"10", "1995"=>"20", "2010"=>"2"} 

降序排列:

year = ["1990", "1995", "2010", "1985"] 
days = [ '10', '20', '2', '50' ] 

p h = Hash[year.zip(days).sort.reverse] 
#=> {"2010"=>"2", "1995"=>"20", "1990"=>"10", "1985"=>"50"}