Option in collection.map in Ruby on Rails ausschließen?

8

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:

%Vor%

Ich habe unless s.name == "excluded_state eingegeben, aber es funktioniert auch nicht:

Was mache ich falsch?

    
Ryan 13.09.2012, 14:26
quelle

2 Antworten

20

map erlaubt keine Werte zu überspringen. Sie müssen unerwünschte Elemente zuerst ablehnen.

%Vor%

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:

%Vor%     
Eureka 13.09.2012, 14:34
quelle
6

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

%Vor%

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.

  1. Array#compact gibt eine Kopie des Arrays mit allen nil -Elementen zurück.
mikej 13.09.2012 14:38
quelle

Tags und Links