-1

在 Rails 中,我试图创建二维,但在搜索了很多时,我发现大多数人建议Array, HASH必须使用代替。

在这里,我试图构建一个按降序排列的年份数组,但是我随机得到这个年份,所以我使用了数组排序。这里出现了问题,我想在一年中再传递一个值,比如每年的天数。

因此,在排序时,我将丢失另一个数组中存在的相关值。

例子 :

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

现在我无法按照每年的降序对天数进行排序。

4

2 回答 2

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"} 
于 2013-06-19T06:56:37.743 回答
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"}
于 2013-06-19T07:24:25.663 回答