[Ruby] Splat Operator und Array aus Hashes


engelmarkus

Erfahrenes Mitglied
#1
Guten Abend zusammen,
ich habe hier eine Methode, die bekommt entweder einen einzelnen Hash oder ein Array mit mehreren Hashes übergeben, etwa so:
Ruby:
namen = {name: "Name", vorname: "Vorname"}
# oder
namen = [{name: "Name1", vorname: "Vorname1"}, {name: "Name2", vorname: "Vorname2"}]
Leider kann ich das auf der anderen Seite nicht ändern. Da ich beide Fälle jetzt gerne einheitlich mit "map" verarbeiten möchte, habe ich mir gedacht, ich versuche, mit dem Splat Operator den Parameter in ein Array zu packen, falls das noch kein Array ist.
Da ich das einfach nicht hinbekomme, habe ich mal folgende Lösung geschrieben. Geht das wirklich nicht eleganter?
Ruby:
namen = [namen] unless namen.kind_of?(Array)
strings = namen.map { |n| "#{n[:name]} #{n[:vorname]}" }
Wenn ich noch kein Array habe, macht mir der Splat Operator immer den Hash kaputt:
Ruby:
namen = {name: "Name", vorname: "Vorname"}
[*namen]
=> [[:name, "Name"], [:vorname, "Vorname"]]
So funktioniert es, allerdings bekomme ich dann natürlich ein doppeltes Array, wenn schon eines vorhanden war:
Ruby:
[*[namen]]
Danke für eure Hilfe,
Markus
 
Zuletzt bearbeitet: