【问题标题】:`Array#join` on nested arrays only`Array#join` 仅适用于嵌套数组
【发布时间】:2016-02-24 03:34:39
【问题描述】:

我有一个数组数组。每个子数组的第二个元素又是一个数组:

arr = [
  ["val1", ["The cat", "3"]],
  ["val2", ["Big", "Another", "6"]],
  ["val3", ["343"]]
]

我想转换数组,以便第三层嵌套的数组分别连接成一个字符串,由空格和逗号分隔,如下所示:

[["val1", "The cat, 3"], ["val2", "Big, Another, 6"], ["val3", "343"]]

如何仅在嵌套数组上调用 join

【问题讨论】:

  • 举个例子的时候,请给所有的输入对象赋值。例如,arr = [[["val1",..]]]。这样读者就可以在 cmets 和答案中引用arr 而无需定义它。
  • 我已经在这里看到你的问题几次了。只是一个提示,也许你不应该使用数组数组。也许哈希对你的数据来说是一个更好的数据结构?

标签: arrays ruby


【解决方案1】:
arr.map{|e, a| [e, a.join(", ")]}
# => [["val1", "The cat, 3"], ["val2", "Big, Another, 6"], ["val3", "343"]]

【讨论】:

  • 好吧,@sawa 是我调查map 的时候了,你一直在用它回答我的问题。 :)
【解决方案2】:

对您的array执行以下操作

array.map {|el| el.flatten}

编辑 :根据您的更新,您可以完成加入深度嵌套的数组,如下所示:

array.map {|x| x.map {|y| y.is_a?(Array) ? y.join(', ') : y}}

【讨论】:

    【解决方案3】:

    map 和 flatten 是你的朋友!

    a.map(&:flatten)
    

    【讨论】:

      【解决方案4】:

      您可以通过在循环中连接它来做到这一点。

      arr = [["val1", ["The cat", "3"]], ["val2", ["Big", "Another", "6"]], ["val3", ["343"]]
      
      arr.map{|a| [a.first] + a.last}
      #=> [["val1", "The cat", "3"], ["val2", "Big", "Another", "6"], ["val3", "343"]]
      

      或者只是内部数组中的flatten

      arr.map(&:flatten)
      

      【讨论】:

      • flatten 的问题是我需要将数组值放在一个用逗号分隔的字符串中。这就是为什么我选择.join
      猜你喜欢
      • 2020-11-20
      • 2021-09-15
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多