我想用不同的深度来“扁平化”(不是传统意义上的.flatten
)一个哈希,像这样:
{
:foo => "bar",
:hello => {
:world => "Hello World",
:bro => "What's up dude?",
},
:a => {
:b => {
:c => "d"
}
}
}
字符串
将所有嵌套的键合并成一个字符串,所以它会变成这样:
{
:foo => "bar",
:"hello.world" => "Hello World",
:"hello.bro" => "What's up dude?",
:"a.b.c" => "d"
}
型
但我想不出什么好办法它有点像Rails添加到Hash中的deep_
辅助函数,但不完全相同。我知道递归是一种方法,但我从来没有用Ruby写过递归函数。
7条答案
按热度按时间vx6bjr1n1#
你可以这样做:
字符串
flmtquvp2#
因为我喜欢
Enumerable#reduce
,而且很讨厌线条:个字符
prdp8dxp3#
这里投票最高的答案不会一直展平对象,它不会展平数组。我在下面纠正了这个问题,并提供了一个比较:
字符串
我知道这个问题有点老了,我上网查找了上面的代码比较,这是我发现的。当它与Mixpanel等分析服务的事件一起使用时,效果非常好。
liwlm1x94#
或者,如果你想要一个猴子补丁的版本或Uri的答案去
your_hash.flatten_to_root
:字符串
ulydmbyx5#
在我的例子中,我使用的是Parameters类,所以上面的解决方案都不适合我。为了解决这个问题,我创建了以下函数:
字符串
然后你可以像
flatten_parameters = flatten_params(params)
一样使用它。希望这对你有帮助。eivnm1vs6#
以防万一你想留住他们的父母
字符串
rdlzhqv97#
这里有一个对我有效的解决方案:
字符串