Apakah buruk untuk memeriksa apakah array tidak kosong dengan menggunakan any?
metode?
a = [1,2,3]
a.any?
=> true
a.clear
a.any?
=> false
Atau lebih baik digunakan unless a.empty?
?
any?
tidak sama dengan not empty?
dalam beberapa kasus.
>> [nil, 1].any?
=> true
>> [nil, nil].any?
=> false
Dari dokumentasi:
Jika blok tidak diberikan, Ruby menambahkan blok implisit {| obj | obj} (itu ada? akan mengembalikan true jika setidaknya salah satu anggota koleksi tidak salah atau nihil).
empty?
?present?
metode checkout .#present?
hanya untuk Rails. Di Ruby murni Anda akan mendapatkanNoMethodError: undefined method 'present?' for Array
.require 'activesupport'
.Perbedaan antara array yang mengevaluasi nilainya ke
true
atau jika kosong.Metode ini
empty?
berasal dari kelas Arrayhttp://ruby-doc.org/core-2.0.0/Array.html#method-i-empty-3F
Ini digunakan untuk memeriksa apakah array berisi sesuatu atau tidak. Ini termasuk hal-hal yang dievaluasi
false
, sepertinil
danfalse
.Metode ini
any?
berasal dari modul Enumerable.http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-any-3F
Ini digunakan untuk mengevaluasi jika nilai "any" dalam array dievaluasi
true
. Metode serupa untuk ini adalahnone?
,all?
danone?
, di mana mereka semua hanya memeriksa untuk melihat berapa kali benar dapat dievaluasi. yang tidak ada hubungannya dengan hitungan nilai yang ditemukan dalam array.kasus 1
kasus 2
kasus 3
sumber
Awalan pernyataan dengan tanda seru akan memberi tahu Anda apakah array tidak kosong. Jadi dalam kasus Anda -
sumber
Hindari
any?
untuk array besar.any?
adalahO(n)
empty?
adalahO(1)
any?
tidak memeriksa panjang tetapi sebenarnya memindai seluruh array untuk elemen yang benar.empty?
di sisi lain memeriksa panjang array saja.Perbedaannya relevan jika Anda memiliki array "jarang" yang dimulai dengan banyak
nil
nilai, seperti misalnya array yang baru saja dibuat.sumber
nil
nilai, dengan array "normal"any?
tanpa pengembalian blok pada elemen pertama, sehingga kompleksitasnya masih O (1) sepertiempty?
metodeSaya akan menyarankan menggunakan
unless
danblank
memeriksa kosong atau tidak.Contoh:
Ini akan tahu 'a' kosong atau tidak. Jika 'a' kosong maka kode di bawah ini tidak akan berjalan.
sumber
#blank?
adalah bagian dari Rails. Jika mereka sudah menggunakan Rails,#present?
bagaimanapun negasinya#blank?
.Saya tidak berpikir itu buruk untuk digunakan
any?
sama sekali. Saya sering menggunakannya. Jelas dan ringkas.Namun jika Anda khawatir tentang semua
nil
nilai yang dibuang, maka Anda benar-benar bertanya apakah array memilikisize > 0
. Dalam hal ini, ekstensi sederhana yang mati ini (TIDAK dioptimalkan, gaya monyet) akan membuat Anda dekat.Ini cukup deskriptif, secara logis bertanya "apakah objek ini memiliki ukuran?". Dan ringkas, dan tidak memerlukan ActiveSupport. Dan mudah untuk dibangun.
Beberapa tambahan untuk dipikirkan:
present?
dari ActiveSupport.String
, yang mengabaikan spasi putih (sepertipresent?
halnya).length?
untukString
atau jenis lain yang lebih deskriptif.Integer
danNumeric
jenis lainnya , sehingga nol logis kembalifalse
.sumber