Saya memiliki array berikut
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]
Saya ingin menghapus elemen kosong dari array dan menginginkan hasil berikut:
cities = ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
Apakah ada metode seperti compact
itu yang akan melakukannya tanpa loop?
cities.reject!(&:empty?)
cities.reject!(&:blank?)
?empty?
untuk arrayblank?
hanya tersedia melaluiActiveSupport
. Standard Ruby memang menggunakanString#empty?
: ruby-doc.org/core-1.9.3/String.html#method-i-empty-3Freject
lebih baik daripadareject!
karena[].reject!(&:empty?)
pengembaliannil
,[].reject(&:empty?)
pengembalian[]
sumber
blank?
adalah pilihan yang baik tetapirails
metode, dan pertanyaan ini mengenai dataranruby
Inilah yang bekerja untuk saya:
keluaran:
sumber
:blank?
adalah Rails-specific.NoMethodError: undefined method empty? for nil:NilClass
,:blank?
lebih baik daripada:empty?
:blank
bekerja lebih baik daripada:empty
. Karena:empty
tidak berfungsi untuknil
Dalam proyek saya, saya menggunakan
delete
:sumber
Ketika saya ingin merapikan array seperti ini, saya menggunakan:
Ini akan menghapus semua elemen kosong atau nihil.
sumber
Paling Eksplisit
Ini akan menghapus
nil
nilai dan nilai string kosong (""
).Sebagai contoh:
sumber
Coba ini:
sumber
Gunakan
reject
:sumber
reject(&:empty?)
,.nil.empty?
booom break!reject(&:empty?)
dengancompact
misalnya[nil, ''].compact.reject(&:empty?)
Alasan Anda ingin menggunakan
blank?
lebihempty?
adalah karena kosong mengenali nol, string kosong, dan ruang putih. Sebagai contoh:masih akan kembali:
Dan menyerukan
empty?
pada" "
kehendak kembalifalse
, yang mungkin Anda ingin menjaditrue
.Catatan:
blank?
hanya dapat diakses melalui Rails, Ruby hanya mendukungempty?
.sumber
Sudah ada banyak jawaban tetapi di sini ada pendekatan lain jika Anda berada di dunia Rails:
sumber
present?
berasal dariActiveSupport
. Ini memiliki tag tanpa Rails dan membutuhkan permata ekstra untuk satu metode yang tampaknya berlebihan.Berikut ini satu pendekatan lagi untuk mencapai ini
kita dapat menggunakan
presence
denganselect
sumber
" "
elemen dalam array saya yang tidak dihapus dengan metode tolak. Metode Anda dihapusnil
""
atau" "
item.Berikut adalah solusi jika Anda memiliki tipe campuran dalam array Anda:
Larutan:
Keluaran:
sumber
Anda bisa Coba ini
sumber
cities.reject!(&:blank?)
sumber
Cara terpendek
cities.select(&:present?)
sumber
metode lain:
sumber
Perbarui dengan ketat dengan
join
&split
Hasilnya adalah:
Perhatikan bahwa: ini tidak berfungsi dengan kota dengan spasi
sumber