2011-03-06 37 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

相关问题