如何重命名密钥以便强调它们

时间:2011-07-05 21:21:17

标签: ruby

这是一个红宝石哈希:

a = {
  :testOne => 1,
  :testTwo => 2
} 

如何重命名密钥以便强调它们?

a = {
  :test_one => 1,
  :test_two => 2
}
肯布卢姆让我在这里找到了正确的道路。您确实需要ActiveSupport或Rails3。但是,对于此解决方案,您不需要任何特定的宝石:

hash = Hash[a.map {|k,v| [k.to_s.underscore.to_sym, v]}]

谢谢你!

2 个答案:

答案 0 :(得分:4)

Hash[a.map { |k,v| [k.to_s.downcase.sub('test','test_').to_sym, v] }]

更新:如果您需要查找公共根字符串,可以使用:

root = a.keys.inject do |m, e|
    s = m.to_s
    s.chop! while !e.to_s.start_with? s
    s
  end

答案 1 :(得分:2)

这个答案需要facets gem和activesupport(它是rails的一部分)。

require 'active_support'
require 'facets'

a.map{|k,v| [k.to_s.underscore.to_sym, v]}.to_h
#                  ^^^^^^^^^^^             ^^^^ from facets
#                  from activesupport