Ich habe ein Ruby-Array mit einigen Zeichenfolgenwerten. Ich muss einfach:
- Finden Sie alle Elemente, die einem Prädikat entsprechen
- Führen Sie die übereinstimmenden Elemente durch eine Transformation
- Geben Sie die Ergebnisse als Array zurück
Im Moment sieht meine Lösung so aus:
def example
matchingLines = @lines.select{ |line| ... }
results = matchingLines.map{ |line| ... }
return results.uniq.sort
end
Gibt es eine Array- oder Enumerable-Methode, die select und map zu einer einzigen logischen Anweisung kombiniert?
Enumerable#grep
Methode macht genau das, was gefragt wurde und ist seit über zehn Jahren in Ruby. Es braucht ein Prädikatargument und einen Transformationsblock. @hirolau gibt die einzig richtige Antwort auf diese Frage.
filter_map
genau für diesen Zweck eingeführt. Mehr Infos hier .