【问题标题】:Delete first non-nil sub-array element from a Ruby 2D Array从 Ruby 二维数组中删除第一个非零子数组元素
【发布时间】:2016-12-17 06:15:04
【问题描述】:

给定一个数组,其中每一项都是一个数组,但可以为空,例如:

a = [ [], [8, 6], [7, 5, 3, 0], [], [9] ]

可以通过以下方式删除第一个非零子数组元素:

a[a.index { |item| item != [] }].shift

a保持这种状态:

[ [], [6], [7, 5, 3, 0], [], [9] ]

在 Ruby 中是否有更简洁的表达方式,无论是否传递 a.index { |item| item != [] } 作为要从中删除的子数组的索引?

【问题讨论】:

  • 你能在完成后展示你想要a 的样子吗?

标签: arrays ruby


【解决方案1】:

你可以使用Enumerable#find:

a.find { |e| !e.empty? }.shift
=> 8
a
=> [[], [6], [7, 5, 3, 0], [], [9]]

【讨论】:

  • 啊,当然! “找到第一个不为空的东西并转移它。”
  • 您可以使用e.any? 避免否定,如果您希望表达式返回修改后的数组,可以使用Object#tapa.tap { |b| b.find { |e| e.any? }.shift } #=> [[], [6], [7, 5, 3, 0], [], [9]](和a 现在相同)。跨度>
【解决方案2】:

您可以用空数组替换子数组。这适用于确切说明的问题,但可能无法推断出您正在寻找的内容。

a.map{[]}

【讨论】:

  • 谢谢,但我已经澄清了我的问题,并使代码更具体地解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
相关资源
最近更新 更多