用Ruby从数组中删除字符串的最佳方法

17

假设我有这个数组:

array = ["str1", "str2", "str3", "str4", "str5", "str6", "str7", "str8"]

我在做什么:

array.delete_if {|i| i == "str1" || i == "str3" || i == "str5"}

我得到了:

["str2", "str4", "str6", "str7", "str8"]

在 Ruby 中是否有更好的方法来做这件事?

2个回答

39

你可以这样做:

array - %w{str1 str2 str3}

请注意,这会返回一个新的数组,其中已删除"str1""str2""str3",而不是直接修改array(就像delete_if一样)。您可以像这样简洁地重新分配新数组到array

array -= %w{str1 str2 str3}

5
array -= %w[ ... ] 实现原地重新赋值,但不会改变对原数组的任何引用。 - tadman
好主意,我已将其添加到原始答案中。 - Alex D
5
提醒大家,%w{word word2} 不接受包含字符串的变量。我之前不知道这一点,它也无法从数组中删除字符串。为了使它起作用,我使用了 array -= [variable_containing_string] - Cassio Cabral

2
array.reject{|e| e=~ /str[135]/}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接