字符串和散列数组:展平以制作一维

时间:2017-02-04 15:18:57

标签: arrays ruby ruby-on-rails-4 hash

如果我有一个如下所示的数组:

['one', { 'two' => 'three' }, 'four']

我怎样才能得到它:

['one', 'two', 'three', 'four']

.flatten.flat_map之类的内容不会移除内部哈希值。

2 个答案:

答案 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