Ruby gibt den Inhalt eines Arrays als durch Kommas getrennte Zeichenfolge Ruby aus

79

Gibt es eine korrektere Möglichkeit, den Inhalt eines Arrays als durch Kommas getrennte Zeichenfolge auszugeben?

@emails = ["[email protected]", "[email protected]", "[email protected]"]

@emails * ","

=> "[email protected]", "[email protected]", "[email protected]"

Das funktioniert, aber ich bin mir sicher, dass es eine elegantere Lösung geben muss.

chell
quelle
9
Eigentlich wird das Ergebnis sein"[email protected],[email protected],[email protected]"
Andre Figueiredo
3
Ich bin verwirrt: Worum geht es bei Uneleganten array_name * ","?
M. Justin

Antworten:

187

Haben Sie das versucht:

@emails.join(",")
Henrik
quelle
22
joinist ein Alias ​​für *, also wiederholt dies nur die Frage des OP.
Jörg W Mittag
1
Ist joinaber sicher leichter zu verstehen.
Henrik
12

Obwohl das OP und viele Antworten implizieren, dass das Array immer Inhalt enthält, muss ich manchmal einer Liste beitreten, die "leere" Elemente enthalten kann (normalerweise zum Verketten von Daten für eine Benutzeroberfläche).

Hier ist ein kleiner "Fortschritt", wie unterschiedliche Ansätze mit solch einem "unvollkommenen" Array von Zeichenfolgen umgehen:

['a','b','',nil].join(',') # => "a,b,," 
['a','b','',nil].compact.join(',') # => "a,b,"
['a','b','',nil].compact.reject(&:empty?).join(',') # => "a,b"
['a','b','',nil].reject(&:blank?).join(',') # Rails only

Der letzte ist mein Lieblingsansatz (Rails).

Jon Kern
quelle
2

Ich musste nur etwas Ähnliches in einer ERB-Vorlage mit tun AllowedUsers <%= _allowed_users.join(" ") %>. Es ist vielleicht nicht so elegant, wie Sie es gesucht haben, aber es ist dieselbe Implementierung, die ich in mehreren Sprachen gesehen habe. Das könnte also ein Gewinn für die Lesbarkeit sein.

Fraq
quelle