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

时间:2011-01-04 15:28:53

标签: ruby arrays

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

3 个答案:

答案 0 :(得分:64)

li.delete_at(li.index(n) || li.length)

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]

答案 1 :(得分:14)

如果|| li.length是为了避免将nil发送到li.delete_at(这会导致TypeError),那么更易读的版本可能如下所示

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

答案 2 :(得分:4)

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

class Array
  def delete_first item
    delete_at(index(item) || length)
  end
end