如果我有一个如下所示的数组:
['one', { 'two' => 'three' }, 'four']
我怎样才能得到它:
['one', 'two', 'three', 'four']
.flatten
和.flat_map
之类的内容不会移除内部哈希值。
答案 0 :(得分:3)
我认为你将得到的最接近的解决方案是:
['one', { 'two' => 'three' }, 'four'].
flat_map {|f| f.respond_to?(:flatten) ? f.flatten : f }
我更喜欢#respond_to?
,因为通常最好检查它是否像鸭子一样嘎嘎叫,而不是它是鸭子。
答案 1 :(得分:1)
有几种方法可以做到这一点。例如,您可以遍历数组,检查值是否为哈希(如果是这样将其转换为数组),然后在最后将其展平:
array.map!{ |i| i.kind_of?(Hash) ? i.to_a : i }.flatten