2011-03-06 66 views
1

Array.delete方法返回已刪除的項目。從Array中刪除項目後,獲取剩餘數組的最有效方法是什麼?

但是,如果我需要剩餘的數組(不更改原始數組),該怎麼辦?

那麼,這是一個選項:

%w(hello stack overflow !).delete_if{|x| x == 'overflow'} 
# => ["hello", "stack", "!"] 

我不知道是否有一個更好的方式,是這樣的:

%w(hello stack overflow !).<something>('overflow') 

任何想法?

回答

6
%w(hello stack overflow !) - %w(overflow) 
=> ["hello", "stack", "!"] 
+0

字符串非常好!謝謝! – 2011-03-06 10:22:52

0
irb(main):001:0> x=%w(hello stack) 
=> ["hello", "stack"] 
irb(main):002:0> x.delete('stack') 
=> "stack" 
irb(main):003:0> x 
=> ["hello"] 

因此,使用delete方法。

+1

原始數組不應該改變。 – 2011-03-06 10:00:24

1

一種方法是這樣的:

newarray = old_array.select {|item| item != "overflow"} 
+0

我認爲這將是非常低效的。 – methyl 2011-03-06 09:59:29

+1

我認爲它與'-'運算符具有相同的效率,因爲它們都創建了新的數組。 – Geo 2011-03-06 10:03:13

2

這將是

%w(hello stack overflow !).reject {|x| x == 'overflow'} 

,以保障數組你,只有刪除它是等於「溢出」

+0

與我的建議非常相似。 – 2011-03-06 10:23:17

+0

我不認爲有一個比這更快的方式不幸(讓我知道如果你找到一個,因爲我有興趣也找到。 – RubyFanatic 2011-03-06 10:31:28

相關問題