如何根据枚举哈希对数组进行排序并返回 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】:

这是不可能的。构造数组时,AB45XY 这两个常量被解除引用,数组包含被引用的对象。无法从值中获取常量的名称。

【讨论】:

我可以通过任何其他方式实现这一目标。它不需要使用枚举。我的要求是,将有一个带有层次结构的项目列表或数组。当给定一组项目时,排序并获得最高的。 不可能。没有从数组值到常量名称的链接。 @sofs1 :您的哈希包含符号作为键。你能把数组设置为array = [:AB45, :XY]吗? @JörgWMittag :你知道吗,我可以在哪里了解这里使用的enum 方法?我在 Ruby 文档中找不到它。至于 OP 的问题,我想知道是否有可能使用数组中常量的 object_id 来明确地将它们标识为枚举中的“它们”标识,即我们通过标识而不是相等来定位它们。 @user1934428 - 是的。另外,我对 Ruby 中的符号并不完全清楚。我也可以将我的枚举哈希键更改为字符串。

以上是关于如何根据枚举哈希对数组进行排序并返回 Ruby 中的最大值?的主要内容,如果未能解决你的问题,请参考以下文章

按键排序哈希,在 Ruby 中返回哈希

如何按值按降序对哈希进行排序并在 ruby​​ 中输出哈希?

如何按此哈希数组进行分组(可枚举)[Ruby,Rails]

如何对 YAML 文件进行排序?

如何对 Perl 哈希值进行排序并相应地对键进行排序(可能在两个数组中)?

ruby 将哈希值转换为排序的字符串数组,以便与另一个哈希值进行比较