我有以下哈希数组,我想使用 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/