我想转换:
[:one, :two, :three]
字符串致:
{one: :one, two: :two, three: :three}
型到目前为止,我正在使用这个:
Hash[[:basic, :silver, :gold, :platinum].map { |e| [e, e] }]
型但我想知道是否有可能通过其他方式?这是在模型中的Rails enum定义中使用的,将值保存为db中的字符串。
enum
ndasle7k1#
阵列编号zip:
zip
a = [:one, :two, :three] a.zip(a).to_h #=> {:one=>:one, :two=>:two, :three=>:three}
字符串阵列编号transpose:
transpose
[a, a].transpose.to_h #=> {:one=>:one, :two=>:two, :three=>:three}
型
2lpgd9682#
我更喜欢从头开始构造散列,而不是构造一个临时数组(这会消耗内存)并将其转换为散列。
[:one, :two, :three].each_with_object({}) { |e,h| h[e]=e } #=> {:one=>:one, :two=>:two, :three=>:three}
字符串
fnx2tebb3#
在Ruby on Rails 6+中,可以使用Enumerable#index_with如果将它与Object#itself结合,它将看起来是这样的:
Enumerable#index_with
Object#itself
%i[one two three].index_with(&:itself) # => {:one=>:one, :two=>:two, :three=>:three}
字符串是的,使用enum声明存储在数据库中的字符串并使用散列这样的方式很方便。
enum my_attribute: MY_ARRAY.index_with(&:itself)
mctunoxg4#
下面是map的另一种方法:
map
>> [:one, :two, :three].map { |x| [x,x] }.to_h => {:one=>:one, :two=>:two, :three=>:three}
4条答案
按热度按时间ndasle7k1#
阵列编号
zip
:字符串
阵列编号
transpose
:型
2lpgd9682#
我更喜欢从头开始构造散列,而不是构造一个临时数组(这会消耗内存)并将其转换为散列。
字符串
fnx2tebb3#
在Ruby on Rails 6+中,可以使用
Enumerable#index_with
如果将它与
Object#itself
结合,它将看起来是这样的:字符串
是的,使用
enum
声明存储在数据库中的字符串并使用散列这样的方式很方便。型
mctunoxg4#
下面是
map
的另一种方法:字符串