如何在 Ruby 中将数组的内容以逗号分隔的字符串形式输出?

91
有没有更正确的方法将数组内容作为逗号分隔的字符串输出?
@emails = ["joe@example.com", "Peter@example.com", "alice@example.com"]

@emails * ","

=> "joe@example.com", "Peter@example.com", "alice@example.com"

这个可以工作,但我相信一定有更优雅的解决方案。


10
实际上,结果将是“joe@example.comPeter@example.comalice@example.com”。 - Andre Figueiredo
3
我感到困惑:array_name * "," 这个表达式为什么不优雅? - M. Justin
3个回答

206

你试过这个吗:

@emails.join(",")

23
join* 的别名,因此这只是在重复提问者的问题。 - Jörg W Mittag
6
但是join更容易理解。 - Henrik

16

虽然原帖和许多答案都暗示该数组始终具有内容,但有时我发现自己需要连接可能包含“空”元素的列表(通常是为了连接UI数据)。

以下是不同方法如何处理这种“不完美”的字符串数组的小“进展”:

['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
我最喜欢的是最后一个(基于Rails的)方法。

2

我刚刚在一个 ERB 模板中使用了类似的东西,使用了 AllowedUsers <%= _allowed_users.join(" ") %>。这可能不像您期望的那样优雅,但它是我在几种语言中看到的相同实现,因此可读性更高。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接