在ruby中按值删除ONE数组元素

时间:2013-07-27 23:07:13

标签: ruby arrays

我有一个非常简单的问题: 如何通过数组中的值删除第一个元素。 例如:

arr = [ 1, 1, 2, 2, 3, 3, 4, 5 ] 
#something like:
arr.delete_first(3)
#I would like a result like => [ 1, 1, 2, 2, 3, 4, 5]

我没有找到类似的东西,任何人都可以帮助我吗?

提前致谢

2 个答案:

答案 0 :(得分:17)

Array#find_index的结果传递给Array#delete_at

>> arr.delete_at(arr.find_index(3))

>> arr
=> [1, 1, 2, 2, 3, 4, 5]

find_index()将返回与其参数匹配的第一个元素的Array索引。 delete_at()从指定索引处的Array中删除该元素。

如果未找到索引,为了防止delete_at()引发TypeError,您可以使用&&构造将find_index()的结果分配给变量并使用delete_at()中的变量,如果它不是nil。如果左侧是&&falsenil的右侧将完全无法执行。

>> (i = arr.find_index(3)) && arr.delete_at(i)
=> 3
>> (i = arr.find_index(6)) && arr.delete_at(i)
=> nil
>> arr
=> [1, 1, 2, 2, 3, 4, 5]

答案 1 :(得分:-7)

您还可以使用:-运算符从数组中删除所需的元素,例如:

$> [1, 2, 3, '4', 'foo'] - ['foo']
$> [1, 2, 3, '4']

希望这有帮助。