我在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指向我正确的方向,有很多帖子与数组有关,但大多数人认为它是一个带有属性的模型,你可以说这些属性按属性排序。当您没有像这种情况中的特定属性时,如何订购?
答案 0 :(得分:1)
如果您需要名称(键)和值,请使用Hash
。
@names = {name_1: 5, name_2: 14, name_3: 26, name_4: 3}
Hash
为Enumerable
,因此您可以对其进行排序。但是排序会导致数组生成,但很容易再次生成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}