从数组中删除匹配元素的第一个实例

Nic*_*ore 33 ruby arrays

说我有数组[1,2,3,1,2,3],我想删除的第一个实例(比如说)2从数组给[1,3,1,2,3].什么是最简单的方法?

mar*_*cog 65

li.delete_at(li.index(n) || li.length)
Run Code Online (Sandbox Code Playgroud)

li[li.length]超出范围,所以|| li.length句柄n不在列表中的情况.

irb(main):001:0> li = [1,2,3,1,2,3]
=> [1, 2, 3, 1, 2, 3]
irb(main):002:0> li.delete_at(li.index(2) || li.length)
=> 2
irb(main):003:0> li.delete_at(li.index(42) || li.length)
=> nil
irb(main):004:0> li
=> [1, 3, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)


小智 15

如果|| li.length是为了避免发送nilli.delete_at(这将导致一个TypeError),那么一个更可读的版本,可能是这样的

li.delete_at li.index(42) unless li.index(42).nil?

  • 您可能希望将`li.index(42)`存储在变量中,以防止进行两次搜索.对于大型阵列,性能会好得多. (7认同)

TNT*_*TNT 5

也许它应该成为 stdlib 的一部分:

class Array
  def delete_first item
    delete_at(index(item) || length)
  end
end
Run Code Online (Sandbox Code Playgroud)