Ruby 按值排序,如果相等,则键入
我想在Ruby中按值对哈希进行排序,如果相等,则按键进行排序。 我尝试了此操作,但它返回相同的数组:Ruby 按值排序,如果相等,则键入,ruby,Ruby,我想在Ruby中按值对哈希进行排序,如果相等,则按键进行排序。 我尝试了此操作,但它返回相同的数组: hash.sort { |x, y| if x[1] == y[1] comp = x[0] <=> y[0] else comp = x[1] <=> y[1] end comp } hash.sort{x,y| 如果x[1]==y[1] comp=x[0]y[0] 其他的 comp=x[1]y[1] 结束 公司 } 如果要将哈
hash.sort { |x, y|
if x[1] == y[1]
comp = x[0] <=> y[0]
else
comp = x[1] <=> y[1]
end
comp
}
hash.sort{x,y|
如果x[1]==y[1]
comp=x[0]y[0]
其他的
comp=x[1]y[1]
结束
公司
}
如果要将哈希作为响应,请执行以下操作:
Hash[ hash.sort_by(&:reverse) ]
如果要将哈希作为响应,请执行以下操作:
Hash[ hash.sort_by(&:reverse) ]
使用
sort\u by
,而不是sort
。它会更快。请注意,这将返回一个由两个值数组组成的数组。如果你真的想要一个新的散列,你需要将它包装在散列中。[]
,例如排序的\u散列=散列[hash.sort\u by(&:reverse)]
@Phrogz我编辑了响应以添加你的建议使用排序依据,而不是排序。它会更快。请注意,这将返回一个由两个值数组组成的数组。如果您确实想要一个新的散列,您需要将其包装在散列中。[]
,例如排序的\u散列=散列[hash.sort\u by(&:reverse)]
@Phrogz我编辑了响应以添加您的建议为什么要对散列进行排序?它没有什么价值。取而代之的是,抓取密钥,按您想要的方式排序,并使用values\u at
以相同的顺序提取值。实际上没有实际原因,这纯粹是一个学术问题。@铁皮人说,这可以用来实现一个简单的优先级队列。为什么要对哈希排序?它没有什么价值。取而代之的是,抓取钥匙,按您想要的顺序排列,然后使用values\u at
以相同的顺序提取值。实际上没有实际原因,这纯粹是一个学术问题。@铁皮人说,这可以用来实现一个简单的优先级队列。
Hash[ hash.sort_by(&:reverse) ]