programing

루비: 포함과 반대되는 것이 있습니까?Ruby Arrays의 경우?

i4 2023. 6. 5. 23:38
반응형

루비: 포함과 반대되는 것이 있습니까?Ruby Arrays의 경우?

제 코드에는 다음과 같은 논리가 있습니다.

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

@players배열입니다.내가 피할 수 있는 방법이 있습니까?!?

이 스니펫은 다음과 같은 것이 될 것입니다.

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

ActiveSupport는 이 방법을 다음에 추가합니다.Array,Hash,그리고.String이것은 순수한 루비가 아니라 많은 루비스트들이 사용하고 있습니다.

출처: Active Support Core Extensions(레일 가이드)

여기 있습니다.

unless @players.include?(p.name)
  ...
end

유사한 기법에 대한 자세한 내용은 Ruby Style Guide를 참조하십시오.

Ruby만 보는 경우:

TL;DR

사용하다none?…과 한.==비교를 위해:

[1, 2].include?(1)
  #=> true
[1, 2].none? { |n| 1 == n  }
  #=> false

Array#include? 하나의 인수를 수락하고 사용합니다.==배열의 각 요소에 대해 확인하는 방법:

player = [1, 2, 3]
player.include?(1)
 #=> true

Enumerable#none? 또한 하나의 인수를 수락할 수 있습니다. 이 경우에는===비교를 위하여반대되는 행동을 하도록 유도하는 것.include?하고 매개변수생다사음용전블을달다록니합을여하략고하를 을 전달합니다.==비교를 위하여

player.none? { |n| 7 == n }
 #=> true 
!player.include?(7)    #notice the '!'
 #=> true

위의 예에서는 실제로 다음을 사용할 수 있습니다.

player.none?(7)
 #=> true

ㅠㅠㅠInteger#==그리고.Integer#===하지만 다음을.하지만 고려해 보십시오.

player.include?(Integer)
 #=> false
player.none?(Integer)
 #=> false

none?아온다를 합니다.falseInteger === 1 #=> true하지만 정말로 합법적입니다.notinclude?는 메드가반야합니다어되를 .true전에 했던 것처럼:

player.none? { |e| Integer == e  }
 #=> true

다음은 어떻습니까?

unless @players.include?(p.name)
  ....
end
module Enumerable
  def does_not_include?(item)
    !include?(item)
  end
end

좋아요, 하지만 진지하게, 잘 되지 않는 한.

사용하다unless:

unless @players.include?(p.name) do
  ...
end

만약 당신이 그것에 반대한다면.!- 기본적으로 수표 앞에 놓아야 한다는 것이고 이것은 당신의 타이핑 흐름을 방해합니다, 그리고 그것이 있습니다..!. 부울을만 하면 됩니다.부울을 반전시키기 위해 체크 뒤에 놓기만 하면 됩니다.

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

사용할 수 있습니까?

unless @players.include?(p.name) do
...
end

unless는 와반입다니의 반대말입니다.if또는 를 사용할 수 있습니다.reject.

넌 할 수 있다.reject필수가 아닌 요소:

@players.reject{|x| x==p.name}

결과를 얻은 후 구현을 수행할 수 있습니다.

이것을 시도해 보세요, 그것은 순수한 루비이기 때문에 주변 프레임워크를 추가할 필요가 없습니다.

if @players.include?(p.name) == false do 
  ...
end

저는 며칠 동안 비슷한 논리와 씨름하고 있었는데, 여러 포럼과 Q&A 게시판을 확인해 보았으나 거의 소용이 없었습니다. 사실 해결책은 사실 매우 간단했습니다.

용사를 합니다.unless싱글이 있는 문은 괜찮습니다.include? 하나의 절이만, 예들어를, 하나포때확, 에된것야할해인을함에 된 것을 해야 할 Array하지만 다른 경우에는, 사용하지 않습니다.include?와 함께exclude?훨씬 더 친근합니다.

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

하지만 위에서 discy42가 말했듯이, 사용은exclude?가 필요합니다.

다음과 같은 방법을 사용해 보십시오.

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

저는 제 자신을 위해 이것을 찾아보다가 이것을 발견하고 해결책을 찾았습니다.사람들은 혼란스러운 방법과 특정 상황에서 작동하지 않거나 전혀 작동하지 않는 방법을 사용하고 있습니다.

이것이 6년 전에 게시된 것을 고려하면, 지금은 너무 늦었다는 것을 알지만, 미래의 방문자들이 이것을 찾기를 바랍니다(그리고 바라건대, 그것이 그들과 당신의 코드를 정리할 수 있기를 바랍니다).

간단한 솔루션:

if not @players.include?(p.name) do
  ....
end

하나의 방법이 아니라, 체인을 연결합니다.count그리고.zero작업:

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

또한 다음 문자열에서도 작동합니다.

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

언급URL : https://stackoverflow.com/questions/10355477/ruby-is-there-an-opposite-of-include-for-ruby-arrays

반응형