什么是最有效和漂亮的方式来Map这一点:
{name:"cheese,test", uid:"1,2"}
改为:
[ {name:"cheese", uid:"1"}, {name:"test", uid:"2"} ]
应动态工作,例如:{ name:"cheese,test,third", uid:"1,2,3" }
或{name:"cheese,test,third,fourth", uid:"1,2,3,4", age:"9,8,7,6" }
最后我做了这个:
hash = {name:"cheese,test", uid:"1,2"}
results = []
length = hash.values.first.split(',').length
length.times do |i|
results << hash.map {|k,v| [k, v.split(',')[i]]}
end
results.map{|e| e.to_h}
它是工作,但我不满意它,必须是一个更清洁和更"rubyst"的方式来做到这一点
4条答案
按热度按时间bis0qfac1#
可以像这样使用:
乍看起来要复杂得多,但这可以处理任何数量的键。
b4lqfgs42#
我可能会这样使用
transpose
和zip
:要将其分解一点(为操作清晰起见,代码略有修改):
qyzbxkaa3#
输入
代码
产出
lnlaulya4#
我们被赋予
这里有两种创建所需数组的方法。都不构造数组然后转换为散列。
第一名
首次计算
则计算
注
第二名
此方法不将哈希值转换为数组。
我们有
我们可以用 free-spacing 模式表示正则表达式,使其自文档化。