'any'를 사용해도 괜찮습니까?배열이 비어 있지 않은지 확인하시겠습니까?
다음을 사용하여 배열이 비어 있지 않은지 확인하는 것이 나쁜가요?any?
방법?
a = [1,2,3]
a.any?
=> true
a.clear
a.any?
=> false
아니면 사용하는 것이 더 나은가요?unless a.empty?
?
any?
와 같지 않습니까?not empty?
경우에 따라서는
>> [nil, 1].any?
=> true
>> [nil, nil].any?
=> false
설명서에서 다음을 참조하십시오.
블록이 지정되지 않은 경우 Ruby는 암시적 블록 {|obj|obj}을(를) 추가합니다. 즉, 컬렉션 멤버 중 하나 이상이 거짓이거나 0이 아닌 경우 true를 반환합니다.
값을 평가하는 배열 간의 차이true
또는 비어 있는 경우.
방법empty?
배열 클래스에서 가져옵니다.
http://ruby-doc.org/core-2.0.0/Array.html#method-i-empty-3F
배열에 포함된 내용이 있는지 확인하는 데 사용됩니다.여기에는 다음을 평가하는 것이 포함됩니다.false
,예를 들어nil
그리고.false
.
>> a = []
=> []
>> a.empty?
=> true
>> a = [nil, false]
=> [nil, false]
>> a.empty?
=> false
>> a = [nil]
=> [nil]
>> a.empty?
=> false
방법any?
Enumerable 모듈에서 가져옵니다.
http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-any-3F
배열의 "임의의" 값이 다음 값으로 평가되는지 여부를 평가하는 데 사용됩니다.true
이와 유사한 방법은 다음과 같습니다.none?
,all?
그리고.one?
그들은 단지 몇 번이나 참이 평가될 수 있는지 확인할 뿐입니다.이 값은 배열에서 발견된 값의 개수와 관련이 없습니다.
사례 1
>> a = []
=> []
>> a.any?
=> false
>> a.one?
=> false
>> a.all?
=> true
>> a.none?
=> true
사례 2
>> a = [nil, true]
=> [nil, true]
>> a.any?
=> true
>> a.one?
=> true
>> a.all?
=> false
>> a.none?
=> false
케이스 3
>> a = [true, true]
=> [true, true]
>> a.any?
=> true
>> a.one?
=> false
>> a.all?
=> true
>> a.none?
=> false
피하다any?
대규모 어레이의 경우.
any?
이라O(n)
empty?
이라O(1)
any?
에서는 길이를 확인하지 않지만 실제로 전체 배열에서 진실 요소를 검색합니다.
static VALUE
rb_ary_any_p(VALUE ary)
{
long i, len = RARRAY_LEN(ary);
const VALUE *ptr = RARRAY_CONST_PTR(ary);
if (!len) return Qfalse;
if (!rb_block_given_p()) {
for (i = 0; i < len; ++i) if (RTEST(ptr[i])) return Qtrue;
}
else {
for (i = 0; i < RARRAY_LEN(ary); ++i) {
if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) return Qtrue;
}
}
return Qfalse;
}
empty?
반면에 배열의 길이만 확인합니다.
static VALUE
rb_ary_empty_p(VALUE ary)
{
if (RARRAY_LEN(ary) == 0)
return Qtrue;
return Qfalse;
}
여러 개로 시작하는 "희소한" 어레이가 있는 경우 차이가 중요합니다.nil
값(예: 방금 만든 배열)입니다.
문 앞에 느낌표를 붙이면 배열이 비어 있지 않은지 여부를 알 수 있습니다.그래서 당신의 경우에는-
a = [1,2,3]
!a.empty?
=> true
를 사용하는 것이 좋습니다.unless
그리고.blank
확인할 항목이 비어 있는지 여부입니다.
예:
unless a.blank?
a = "Is not empty"
end
'a'가 비어 있는지 여부를 알 수 있습니다.'a'가 비어 있으면 아래 코드가 실행되지 않습니다.
저는 사용하는 것이 나쁘다고 생각하지 않습니다.any?
조금도.많이 써요.명확하고 간결합니다.
하지만 만약 당신이 모든 것을 걱정한다면.nil
가치들이 그것을 벗어 던지면, 당신은 정말로 배열이 가지고 있는지 묻고 있는 것입니다.size > 0
그런 경우, 이 죽은 단순 확장(최적화되지 않은 원숭이 스타일)이 당신을 가깝게 할 것입니다.
Object.class_eval do
def size?
respond_to?(:size) && size > 0
end
end
> "foo".size?
=> true
> "".size?
=> false
> " ".size?
=> true
> [].size?
=> false
> [11,22].size?
=> true
> [nil].size?
=> true
이는 논리적으로 "이 개체에 크기가 있습니까?"라고 묻는 상당히 설명적입니다.또한 이는 간결하며 액티브 지원이 필요하지 않습니다.그리고 쉽게 구축할 수 있습니다.
고려해야 할 몇 가지 추가 사항:
- 은 이다음같않다습니지과는다않과 .
present?
제공됩니다. - 다음에 대한 사용자 지정 버전이 필요할 수 있습니다.
String
무시하는 (예:present?
). - 당신은 그 이름을 원할지도 모릅니다.
length?
위해서String
또는 더 설명적일 수 있는 다른 유형. - 다음에 대한 사용자 지정을 원할 수 있습니다.
Integer
타기Numeric
types,즉 0이 형, 논이 0을 .false
.
언급URL : https://stackoverflow.com/questions/6245929/is-it-ok-to-use-any-to-check-if-an-array-is-not-empty
'programing' 카테고리의 다른 글
사용자 지정 vb.net 개체의 각 속성을 반복하는 방법은 무엇입니까? (0) | 2023.05.09 |
---|---|
동일한 컬렉션에 서로 다른 필터가 있는 WPF 다중 컬렉션 보기 (0) | 2023.05.09 |
조사할 가치가 있는 .NET 종속성 주입 프레임워크는 무엇입니까? (0) | 2023.05.04 |
내 코드를 빠르게 하는 시도? (0) | 2023.05.04 |
코코아 핵심 데이터 엔티티를 효율적으로 계산하는 방법 (0) | 2023.05.04 |