将枚举或数组映射到二维数组ruby

vis*_*071 -2 ruby arrays enums ruby-on-rails

假设我有这样的枚举:

enum colors: [:black, :dark_gray, :light_gray, :white]
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

[["black",0], ["dark_gray",1], ["light_gray",2], ["white",3]]
Run Code Online (Sandbox Code Playgroud)

或者作为

[["Black",0], ["Dark gray",1], ["Light gray",2], ["White",3]] #using k.humanize on all keys
Run Code Online (Sandbox Code Playgroud)

我怎样才能将其作为输出.此外,这也可以来自1-d阵列.例如.

input=[1,2,3]
output=[[1,1],[2,4],[3,9]]
Run Code Online (Sandbox Code Playgroud)

使用像地图等的东西

我尝试使用map函数,但我尝试的方式给出了无效的语法.所以我在这里问了.答案应该是微不足道的,但我错过了一些东西.

我试过了:

op = colors.keys.map{[|s| s, colors[s]]}
Run Code Online (Sandbox Code Playgroud)

但这是错误的语法.

SyntaxError: unexpected ']', expecting '}'
Run Code Online (Sandbox Code Playgroud)

Ste*_*zyn 5

此工具已存在但您应将您的枚举更改为单数

enum color: [:black, :dark_gray, :light_gray, :white]
Run Code Online (Sandbox Code Playgroud)

现在调用模型中有一个类方法 colors

MyModel.colors
Run Code Online (Sandbox Code Playgroud)

这将返回一个哈希值

您可以使用该#to_a方法将其转换为数组数组

MyModel.colors.to_a
Run Code Online (Sandbox Code Playgroud)