如何在没有明确声明的情况下推送到数组?

时间:2014-06-26 09:55:04

标签: ruby arrays

我有一系列Rails应用用户对象(用户),我正在从一个新数组中收集这些对象的电子邮件条目。我厌倦了这样做:

emails = []
users.each {|user| emails << user.email}

有没有办法在枚举器块中一次性声明和使用数组?

2 个答案:

答案 0 :(得分:6)

使用#collect方法

users.collect {|user| user.email }
# in short
users.collect(&:email)

收集电子邮件将很高兴阅读而不是地图电子邮件,因此我将使用#collect。但这两种方法都是彼此的同义词。

答案 1 :(得分:1)

#each_with_object方法。

users.each_with_object( [] ) {|user, emails| emails << user.email}

不是一个很好的例子,collect在这里工作得更好,因为你需要一个数组。但是,如果您碰巧使用不同的容器,而不是数组(可能是一些自定义类),这可能会很方便。

我还必须注意它看起来很像ActiveRecord用法,因为它与Rails有关。所以你可能会发现#pluck很有用:

我不能在这里提供相同的代码,因为我不知道你在users中有什么。但这是一个类似的片段:

User.all.pluck(:email)