2013-07-27 72 views
6

我有一個非常簡單的問題: 如何通過數組中的值刪除第一個元素。 例如:通過ruby中的值刪除一個數組元素

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] 

我沒有找到類似的話,任何人都可以幫助我嗎?

在此先感謝

回答

16

傳遞的Array#find_index結果爲Array#delete_at

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

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

find_index()將返回它的參數相匹配的第一個元素的數組索引。 delete_at()從指定索引處的數組中刪除該元素。

爲了防止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] 
+0

你應該檢查'find_index'參數是否包含在數組中,否則'delete_at'因爲它的參數是'nil'會產生'TypeError'。 – toro2k

+0

@ toro2k確實。上面添加的替代方法避免了TypeError –

+2

更緊湊的方式可以是'arr.delete_at(arr.index(3)|| arr.size)'。 – toro2k

-8

您還可以使用:-操作員從數組中刪除所需的元素,例如:

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

希望這有助於。

+0

不幸的是,這會從數組中刪除'foo'的所有實例 –

+0

'x = [1,1]; x - [1]#=> []'。這並不回答這個問題,即明確*「按值**刪除** ONE **數組元素」*。 –

相關問題