2013-06-20 17 views
19

Hepimizin bildiği gibi, Array#compact diziden nil öğelerini kaldırır. boş öğeler için bir Array # compact eşdeğeri var mı?

array.reject { |element| element.empty? }

(ayrıca #blank? boş elemanlar ve nil elemanlarının kurtulmak için yapabileceği raylar olarak) [] gibi boş öğeleri kaldırmak olacaktır.

Array#compact gibi boş/boş öğeleri kaldırmak için kestirme bir yöntem var mı? Veya Array#reject kullanarak en iyi bahse girerim?

Eğer varsa, #compact "boş" eşdeğerini görmedim. Ama belki sadece ona bakıyorum.

cevap

25

Evet var! scarver2 ve Hoang Le açıklandığı gibi dizi nil içeriyorsa

array.reject &:empty? 

Bununla birlikte, bu bir NoMethodError başarısız olur.


Eğer Rails veya Active Support kullanıyorsanız, güvenle yazabilirsiniz: tüm nesneler, blank? için including nil tepki beri

array.reject &:blank? 

hiçbir hata olacaktır. mu is too short önerdiği gibi

da bunu yapmanın başka bir yolu yoktur: Bu present?blank? açısından uygulanan görünüyor

array.select &:present? 

böylece hem uygundur.

+7

Ayrıca, eğer daha iyi okursanız Rails'de array.select (& present present?) 'I de yapabileceğinizi varsayalım. –

+0

İyi nokta; bir sebepten dolayı genellikle sadece 'Array # map' yapıyorum' kullanmayı düşünüyorum. – gregates

+1

@muistooshort Harika bir fikirle 'select (&: present?) 'Bu, tüm öğeler boşsa boş bir dizi döndürür. 'Reddetme' yöntemi 'katılma' ya da 'harita' gibi ardışık yöntemlere başarısız olmak için 'nil' döndürüyordu. – scarver2

İlgili konular