当不在模型中时,rails按值排序数组

时间:2017-08-23 15:56:33

标签: ruby-on-rails arrays

我在rails runner(这不是模型,没有属性)中创建了一个数组,如:

name_1 = 5
name_2 = 14
name_3 = 26
name_4 = 3
...

 @names = [name_1, name_2, name_3, name_4, name_5]

每个“name_x”都有一个整数存储为其值。

如何订购数组以便命令输出[highest =>最低]除了当前值,还显示“名称”[键,值]?。

目前,

puts @names 

仅显示没有订单的值。 Tks指向我正确的方向,有很多帖子与数组有关,但大多数人认为它是一个带有属性的模型,你可以说这些属性按属性排序。当您没有像这种情况中的特定属性时,如何订购?

1 个答案:

答案 0 :(得分:1)

如果您需要名称(键)和值,请使用Hash

@names = {name_1: 5, name_2: 14, name_3: 26, name_4: 3}

HashEnumerable,因此您可以对其进行排序。但是排序会导致数组生成,但很容易再次生成Hash,并且Ruby中的哈希值会保持插入顺序。

@names.sort_by{|k,v| v}
[[:name_4, 3], [:name_1, 5], [:name_2, 14], [:name_3, 26]]

@names.sort_by{|k,v| v}.to_h
{:name_4=>3, :name_1=>5, :name_2=>14, :name_3=>26}

自然排序顺序是升序(从最小到最大),但您可以忽略sort_by值,或反转生成的数组。

@names.sort_by{|k,v| -v}.to_h
{:name_3=>26, :name_2=>14, :name_1=>5, :name_4=>3}

@names.sort_by{|k,v| v}.reverse.to_h
{:name_3=>26, :name_2=>14, :name_1=>5, :name_4=>3}