Ruby:Ruby数组中是否有除include之外的相反方法?

227

我在我的代码中使用了以下逻辑:

if !@players.include?(p.name)
  ...
end

@players 是一个数组。有没有一种方法可以避免使用 ! 符号?

理想情况下,代码应该是这样的:

if @players.does_not_include?(p.name)
  ...
end

1
这个 do 是有效的 Ruby 代码吗?我得到了一个错误 syntax error, unexpected end-of-input(如果我删除 do,它可以工作)。 - maxymoo
请参考 https://dev59.com/OnI-5IYBdhLWcg3wKVE9#60404934 中有关在数组和集合中搜索的基准测试。 - the Tin Man
13个回答

1

使用unless对于只有单个include?子句的语句是可以的,但是例如当您需要检查某个东西是否包含在一个Array中而不在另一个Array中时,使用include?exclude?会更加友好。

if @players.include? && @spectators.exclude? do
  ....
end

但是正如dizzy42在上面所说的那样,使用exclude?需要ActiveSupport。


只需要使用Active Support的核心扩展即可。https://guides.rubyonrails.org/v3.2/active_support_core_extensions.html#exclude - the Tin Man

0
尝试像这样做:

@players.include?(p.name) ? false : true

0

这不是一个单独的方法,但是链接 countzero 可以起作用:

[1, 2, 3].count(1).zero? # => false
[1, 2, 3].count(4).zero? # => true

它也适用于字符串:

"hello".count("l").zero? # => false
"hello".count("q").zero? # => true

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