Ich habe das folgende Array
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]
Ich möchte leere Elemente aus dem Array entfernen und das folgende Ergebnis erzielen:
cities = ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
Gibt es eine compact
solche Methode , die es ohne Schleifen schafft?
cities.reject!(&:empty?)
cities.reject!(&:blank?)
?empty?
ist für Arraysblank?
ist nur über verfügbarActiveSupport
. Standard Ruby verwendetString#empty?
: ruby-doc.org/core-1.9.3/String.html#method-i-empty-3Freject
ist besser alsreject!
weil[].reject!(&:empty?)
zurückkehrtnil
,[].reject(&:empty?)
zurückkehrt[]
quelle
blank?
ist eine gute Wahl, aber es ist einerails
Methode, und diese Frage bezieht sich auf die Ebeneruby
Folgendes funktioniert bei mir:
Ausgabe:
quelle
:blank?
ist Rails-spezifisch.NoMethodError: undefined method empty? for nil:NilClass
,:blank?
ist besser als:empty?
:blank
funktioniert besser als:empty
. Weil:empty
funktioniert nicht fürnil
In meinem Projekt verwende ich
delete
:quelle
Wenn ich ein Array wie dieses aufräumen möchte, verwende ich:
Dadurch werden alle leeren oder Null-Elemente entfernt.
quelle
Am explizitesten
Dadurch werden sowohl
nil
Werte als auch leere string (""
) -Werte entfernt.Beispielsweise:
quelle
Versuche dies:
quelle
Verwendung
reject
:quelle
reject(&:empty?)
.nil.empty?
Booom Pause!reject(&:empty?)
mitcompact
eg[nil, ''].compact.reject(&:empty?)
Der Grund , den Sie verwenden möchten
blank?
überempty?
ist , dass leer erkennt null, leere Strings und weißen Raum. Zum Beispiel:würde immer noch zurückkehren:
Und ruft
empty?
auf" "
Willen Rückkehrfalse
, die Sie wahrscheinlich sein wollentrue
.Hinweis:
blank?
Zugriff nur über Rails, Ruby unterstützt nurempty?
.quelle
Es gibt bereits viele Antworten, aber hier ist ein anderer Ansatz, wenn Sie in der Rails-Welt sind:
quelle
present?
kommt vonActiveSupport
. Dies hat ein No-Rails-Tag und das Erfordernis eines zusätzlichen Edelsteins für eine Methode scheint übertrieben.Hier ist ein weiterer Ansatz, um dies zu erreichen
wir können
presence
mit verwendenselect
quelle
" "
Elemente in meinem Array, die mit der Ablehnungsmethode nicht entfernt wurden. Ihre Methode entferntnil
""
oder" "
Elemente.Hier ist eine Lösung, wenn Sie gemischte Typen in Ihrem Array haben:
Lösung:
Ausgabe:
quelle
Sie können dies versuchen
quelle
cities.reject!(&:blank?)
quelle
Kürzester Weg
cities.select(&:present?)
quelle
eine andere Methode:
quelle
Update mit einem strengen mit
join
&split
Ergebnis wird sein:
Beachten Sie Folgendes: Dies funktioniert nicht mit einer Stadt mit Leerzeichen
quelle