Якщо всі клавіші - це рядки, і всі вони мають префікс підкреслення, тоді ви можете закріпити хеш на цьому:
h.keys.each { |k| h[k[1, k.length - 1]] = h[k]; h.delete(k) }
k[1, k.length - 1]
Трохи захоплює все , k
крім першого символу. Якщо ви хочете копію, то:
new_h = Hash[h.map { |k, v| [k[1, k.length - 1], v] }]
Або
new_h = h.inject({ }) { |x, (k,v)| x[k[1, k.length - 1]] = v; x }
Ви також можете використовувати, sub
якщо ви не любите k[]
позначення для вилучення підрядка:
h.keys.each { |k| h[k.sub(/\A_/, '')] = h[k]; h.delete(k) }
Hash[h.map { |k, v| [k.sub(/\A_/, ''), v] }]
h.inject({ }) { |x, (k,v)| x[k.sub(/\A_/, '')] = v; x }
І, якщо лише деякі клавіші мають префікс підкреслення:
h.keys.each do |k|
if(k[0,1] == '_')
h[k[1, k.length - 1]] = h[k]
h.delete(k)
end
end
Аналогічні зміни можна зробити для всіх інших варіантів вище, окрім цих двох:
Hash[h.map { |k, v| [k.sub(/\A_/, ''), v] }]
h.inject({ }) { |x, (k,v)| x[k.sub(/\A_/, '')] = v; x }
має бути гаразд з ключами, у яких немає додаткових підстав підкреслення без додаткових модифікацій.