【问题标题】:Array of strings and hashes: flatten to make one dimensional字符串和哈希数组:展平以形成一维
【发布时间】:2017-06-21 20:56:22
【问题描述】:

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

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

我怎样才能得到它:

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

.flatten.flat_map 之类的东西不会删除内部哈希。

【问题讨论】:

  • ['one', { 'two' => 'three' }, 'four'].flat_map { |el| el.is_a?(Hash) ? el.to_a : el }.flatten
  • 不健壮,只是为了好玩:['one', { 'two' => 'three' }, 'four'].to_s.scan(/[a-z]+/)

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


【解决方案1】:

我认为您将获得的最接近的解决方案是:

['one', { 'two' => 'three' }, 'four'].
  flat_map {|f| f.respond_to?(:flatten) ? f.flatten : f }

我更喜欢#respond_to?,因为通常最好检查它是否像鸭子一样嘎嘎叫,而不是它是否是鸭子。

【讨论】:

    【解决方案2】:

    有几种方法可以做到这一点。例如,您可以只遍历数组,检查值是否为 Hash(如果是,则将其转换为数组),然后在最后将其展平:

    array.map!{ |i| i.kind_of?(Hash) ? i.to_a : i }.flatten
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-04
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 2013-05-02
      • 1970-01-01
      • 2017-05-31
      相关资源
      最近更新 更多