ruby-on-rails - 哈希数组的 transform_keys

标签 ruby-on-rails ruby hash key transform

我有以下哈希数组,我想使用 transform_keys 使用正则表达式去除每个键的开头:

array_of_hashes = [{"a_0_abc"=>"1",  
  "a_0_def"=>"1",  
  "a_0_hij"=>"1",},  
 {"a_1_abc”=>"2",  
  "a_1_def"=>"2",  
  "a_1_hij"=>"2"}]

我想要以下内容:

transformed_hash_keys = [{"abc"=>"1",  
 "def"=>"1",  
 "hij"=>"1",},  
{"abc"=>"2",  
 "def"=>"2",  
 "hij"=>"2"}]  

我有以下方法,但结果是 array_of_hashes 而不是 transformed_hash_keys:

def strip  
    s = array_of_hashes.each { |hash| hash.transform_keys { |key| key.sub(/^a_(\d+)_/, '') } }  
end

谁能告诉我我在这个方法中做错了什么?

最佳答案

transform_keys 没有就地操作,each 返回原始迭代器,而不是 block 的结果。

你可以用 map 而不是 each 做你想做的事。

def strip  
    s = array_of_hashes.map { |hash| hash.transform_keys { |key| key.sub(/^a_(\d+)_/, '') } }  
end

或者,您可以使用 transform_keys! 修改 array_of_hashes 的内容

def strip  
    s = array_of_hashes.each { |hash| hash.transform_keys! { |key| key.sub(/^a_(\d+)_/, '') } }  
end

关于ruby-on-rails - 哈希数组的 transform_keys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42307101/

相关文章:

c# - JavaScript 哈希和等效的 .NET 算法

Python字典的Javascript实现

ruby-on-rails - 如何访问 Rails 5 Action Cable Channels 中的关注点和应用程序 Controller 代码

sql - 如何简单地加入 Rails 中的 n 对 n 关联?

javascript - Rails will_paginate 同一页面上的两个对象,从搜索字段传递一个参数

ruby-on-rails - 无法使用 Clockwork 启动 clock.rb 模块 - 来自 activesupport 的未定义方法

javascript - 微前端 - 如何动态加载带有哈希值的 URL

mysql - 如何通过 Rails 迁移减少存在值的 MySQL 列的 varchar?

ruby-on-rails - heroku 运行 rake db :migrate reverts migrations

ruby-on-rails - ENV 变量中的 Capistrano 和 API key ?