[英]How to change hash key from array of hashes in ruby?
Given:鉴于:
data = [
{"votable_id"=>1150, "user_ids"=>"1,2,3,4,5,6,"},
{"votable_id"=>1151, "user_ids"=>"55,66,34,23,56,7,8"}
]
This is the expected result.这是预期的结果。 Array should have first 5 elements.
数组应该有前 5 个元素。
data = [
{"votable_id"=>1150, "user_ids"=>["1","2","3","4","5"]},
{"votable_id"=>1151, "user_ids"=>["55","66","34","23","56","7",8"]}
]
This is what I tried:这是我尝试过的:
data.map{|x| x['user_ids'] = x['user_ids'].split(',').first(5)}
Any other optimized solution?还有其他优化的解决方案吗?
You can also use .map
and .tap
like this您也可以像这样使用
.map
和.tap
data.map do |h|
h.tap { |m_h| m_h["user_ids"]= m_h["user_ids"].split(',').first(5)}
end
data = [
{"votable_id"=>1150, "user_ids"=>"1,2,3,4,5,6,"},
{"votable_id"=>1151, "user_ids"=>"55,66,34,23,56,7,8"}
]
Code代码
h=data.map do |h|
h["user_ids"]=[h["user_ids"].split(',').first(5)].flatten
h
end
p h
Output Output
[{"votable_id"=>1150, "user_ids"=>["1", "2", "3", "4", "5"]}, {"votable_id"=>1151, "user_ids"=>["55", "66", "34", "23", "56"]}]
data.map { |h| h.merge("user_ids"=>h["user_ids"].split(',').first(5)) }
#=> [{"votable_id"=>1150, "user_ids"=>["1", "2", "3", "4", "5"]},
# {"votable_id"=>1151, "user_ids"=>["55", "66", "34", "23", "56"]}]
See Hash#merge .请参阅Hash#merge 。 This leaves
data
unchanged.这使
data
保持不变。 To modify (or mutate ) data
use Hash#merge!要修改(或变异)
data
,请使用Hash#merge! (aka update
). (又名
update
)。 h.merge(k=>v)
is a shortcut for h.merge({ k=>v })
. h.merge(k=>v)
是h.merge({ k=>v })
的快捷方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.