Czy źle jest sprawdzić, czy tablica nie jest pusta za pomocą any?
metody?
a = [1,2,3]
a.any?
=> true
a.clear
a.any?
=> false
A może lepiej użyć unless a.empty?
?
any?
to nie to samo co not empty?
w niektórych przypadkach.
>> [nil, 1].any?
=> true
>> [nil, nil].any?
=> false
Z dokumentacji:
Jeśli blok nie zostanie podany, Ruby dodaje domyślny blok {| obj | obj} (czy jest jakiś? zwróci true, jeśli co najmniej jeden z elementów kolekcji nie ma wartości false lub zero).
empty?
?present?
metodę.#present?
jest przeznaczony tylko dla Railsów. W czystym Ruby dostanieszNoMethodError: undefined method 'present?' for Array
.require 'activesupport'
.Różnica między tablicą oceniającą jej wartości,
true
a jeśli jest pusta.Metoda
empty?
pochodzi z klasy Arrayhttp://ruby-doc.org/core-2.0.0/Array.html#method-i-empty-3F
Służy do sprawdzania, czy tablica zawiera coś, czy nie. Obejmuje to rzeczy, które oceniają
false
, takie jaknil
ifalse
.Metoda
any?
pochodzi z modułu Enumerable.http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-any-3F
Służy do oceny, czy „dowolna” wartość w tablicy ma wartość
true
. Podobne metody do tego sąnone?
,all?
aone?
gdzie oni wszyscy po prostu sprawdzić, ile razy można ocenić prawdziwe. co nie ma nic wspólnego z liczbą wartości znalezionych w tablicy.przypadek 1
przypadek 2
przypadek 3
źródło
Prefiks instrukcji wykrzyknikiem informuje, czy tablica nie jest pusta. Więc w twoim przypadku -
źródło
Unikaj w
any?
przypadku dużych tablic.any?
jestO(n)
empty?
jestO(1)
any?
nie sprawdza długości, ale faktycznie skanuje całą tablicę w poszukiwaniu prawdziwych elementów.empty?
z drugiej strony sprawdza tylko długość tablicy.Różnica jest istotna, jeśli masz „rzadkie” tablice, które zaczynają się od wielu
nil
wartości, takich jak na przykład właśnie utworzona tablica.źródło
nil
wartości, z „normalnymi” tablicamiany?
bez bloków zwracających pierwszy element, więc złożoność jest nadal równa O (1), podobnie jakempty?
metodaSugeruję używanie
unless
iblank
sprawdzanie, czy jest puste, czy nie.Przykład:
Będzie to oznaczać „puste” lub nie. Jeśli „a” jest puste, poniższy kod nie będzie działał.
źródło
#blank?
jest częścią Rails. Jeśli już używają Railsów,#present?
to i#blank?
tak jest zaprzeczeniem .Nie sądzę, żeby korzystanie
any?
z niego było złe . Często go używam. To jasne i zwięzłe.Jeśli jednak obawiasz się, że wszystkie
nil
wartości ją wyrzucają, to naprawdę pytasz, czy tablica masize > 0
. W takim przypadku to martwe proste rozszerzenie (NIE zoptymalizowane, w stylu małpim) zbliży cię.Jest to dość opisowe, logicznie pytające „czy ten obiekt ma rozmiar?”. Jest zwięzły i nie wymaga ActiveSupport. I łatwo go zbudować.
Kilka dodatków do przemyślenia:
present?
z ActiveSupport.String
, która ignoruje białe znaki (podobnie jakpresent?
robi).length?
dlaString
lub innych rodzajów gdzie może być bardziej opisowe.Integer
i innychNumeric
typów, aby zwracało się logiczne zerofalse
.źródło