Ich habe eine Zeile wie folgt:
%Vor% Ich möchte einen Wert aus der states.map
-Auflistung ausschließen. Ich dachte, das würde funktionieren, aber es nicht:
Ich habe unless s.name == "excluded_state
eingegeben, aber es funktioniert auch nicht:
Was mache ich falsch?
map
erlaubt keine Werte zu überspringen. Sie müssen unerwünschte Elemente zuerst ablehnen.
Eine andere (schmutzigere) Lösung besteht darin, nil
für ausgeschlossene Elemente zurückzugeben und Array#compact
für das resultierende Array zu verwenden, um diese nil
-Elemente zu entfernen:
Eurekas Antwort ist gut, aber hier ist nur eine kurze Erklärung, um zu klären, was vor sich geht.
map
gibt ein neues Array mit den Ergebnissen von running block einmal für jedes Element im Array zurück. Wenn Sie [s.name, s.id] unless s.name == "excluded_state"
schreiben, bewirkt dies, dass der Block nil
zurückgibt, wenn s.name == "excluded_state"
, d. H. Das Ergebnis wäre etwas wie
Sie könnten also reject
verwenden, um den unerwünschten Status zuerst zu entfernen, oder Sie könnten einfach compact
1 verwenden, um den nil
-Eintrag für das Ergebnis Ihrer map
zu entfernen hat es ursprünglich geschrieben.
Array#compact
gibt eine Kopie des Arrays mit allen nil
-Elementen zurück. Tags und Links ruby ruby-on-rails