如何根据枚举哈希对数组进行排序并返回 Ruby 中的最大值?
Posted
技术标签:
【中文标题】如何根据枚举哈希对数组进行排序并返回 Ruby 中的最大值?【英文标题】:How to sort an array based on enum hash and return the maximum in Ruby? 【发布时间】:2020-10-02 05:24:08 【问题描述】:enum custom:
AB1: 1,
AB45: 10,
XY: 15
输入:
array = [AB45, XY]
输出应该是:XY,因为 XY(key) 的值是最大值(15)
我尝试了以下方法:
MyClassName.customs.values_at(*array)
。这将返回 [10,15]
【问题讨论】:
预期输出是什么? 输出应该是:XY。也更新了问题。 你能用max_by
吗? MyClassName.customs.max_by |_, value| value .first
我希望您知道 Ruby on Rails 3 已于 3 年前终止,并且包含已知的、未修复的安全漏洞。
array = [AB45, XY]
- 什么是AB45
,什么是XY
?这些是常数吗?或者那是一种类型,而你实际上有array = [:AB45, :XY]
?
【参考方案1】:
这是不可能的。构造数组时,AB45
和XY
这两个常量被解除引用,数组包含被引用的对象。无法从值中获取常量的名称。
【讨论】:
我可以通过任何其他方式实现这一目标。它不需要使用枚举。我的要求是,将有一个带有层次结构的项目列表或数组。当给定一组项目时,排序并获得最高的。 不可能。没有从数组值到常量名称的链接。 @sofs1 :您的哈希包含符号作为键。你能把数组设置为array = [:AB45, :XY]
吗?
@JörgWMittag :你知道吗,我可以在哪里了解这里使用的enum
方法?我在 Ruby 文档中找不到它。至于 OP 的问题,我想知道是否有可能使用数组中常量的 object_id
来明确地将它们标识为枚举中的“它们”标识,即我们通过标识而不是相等来定位它们。
@user1934428 - 是的。另外,我对 Ruby 中的符号并不完全清楚。我也可以将我的枚举哈希键更改为字符串。以上是关于如何根据枚举哈希对数组进行排序并返回 Ruby 中的最大值?的主要内容,如果未能解决你的问题,请参考以下文章
如何按值按降序对哈希进行排序并在 ruby 中输出哈希?