'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타기Numerictypes,즉 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 |