루비: 포함과 반대되는 것이 있습니까?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?
아온다를 합니다.false
Integer === 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
'programing' 카테고리의 다른 글
Apache POI를 사용하여 내 xlsx 시트를 Java 개체로 변환하는 방법 (0) | 2023.06.10 |
---|---|
데이터 프레임에서 숫자 열만 선택 (0) | 2023.06.10 |
'webpack-cli' 모듈을 찾을 수 없습니다. (0) | 2023.06.05 |
Python에서 중첩된 딕트를 어떻게 생성합니까? (0) | 2023.06.05 |
오류: 멤버를 찾을 수 없습니다. 'FirebaseAppPlatform.verify확장' (0) | 2023.06.05 |