我有一系列Rails应用用户对象(用户),我正在从一个新数组中收集这些对象的电子邮件条目。我厌倦了这样做:
emails = []
users.each {|user| emails << user.email}
有没有办法在枚举器块中一次性声明和使用数组?
答案 0 :(得分:6)
使用#collect
方法
users.collect {|user| user.email }
# in short
users.collect(&:email)
收集电子邮件将很高兴阅读而不是地图电子邮件,因此我将使用#collect
。但这两种方法都是彼此的同义词。
答案 1 :(得分:1)
users.each_with_object( [] ) {|user, emails| emails << user.email}
不是一个很好的例子,collect
在这里工作得更好,因为你需要一个数组。但是,如果您碰巧使用不同的容器,而不是数组(可能是一些自定义类),这可能会很方便。
我还必须注意它看起来很像ActiveRecord
用法,因为它与Rails有关。所以你可能会发现#pluck
很有用:
我不能在这里提供相同的代码,因为我不知道你在users
中有什么。但这是一个类似的片段:
User.all.pluck(:email)