map和Ruby之间的区别?

  • 回答 (2)
  • 关注 (0)
  • 查看 (75)

实际上做map和collectRuby / Rails的数组之间有什么区别?

这些文档似乎没有提出任何建议,但是在方法或性能方面可能存在差异吗?

当巨浪把当巨浪把提问于
HKC

红客学院 · 创始人 (已认证)

道可道 非常道 名可名 非常名回答于

比如有一个users表,要等到user的id数组:

select id from users where age > 20;

要实现在如上sql语句,在rails中有以下几种写法:

User.where(‘age > 20‘).select(:id).collect(&:id)
User.where(‘age > 20‘).select(:id).map(&:id)  -> SELECT id FROM `users` WHERE (age < 20)
User.where(‘age > 20‘).pluck(:id)              -> SELECT `users`.`id` FROM `users` WHERE (age < 20)

前两种方法是一样的,都是从数据库中查出数据,然后进行循环,从active record的数据集取出id组成数组。

而pluck方法则是只查id字段,直接返回id的数组,而不是返回active record的数据集,这样我们就不需要再用循环取出id数组。

通常、pluck方法的效率要比上面那两种办法高。

在rails4.0以上,pluck可以传多个字段作为参数。

Person.pluck(:id, :name) -> [[1, ‘David‘], [2, ‘Jeremy‘], [3, ‘Jose‘]]

ruby on rails 里pluck和select(map、collect)的区别

akjok54stay hungry stay foolish回答于

each:连续遍历集合中的所有元素,并做相应的操作,原集合本身不会发生变化。

map: 从集合中获取每个元素,并且传递给块,结果会返回新的数组,原集合发生变化

collect: 类似于map

inject:遍历整个集合,并且将集合中的元素,按照一定的方式累计,最后返回一个新的元素,原集合本省不会发生变化。

扫码关注云+社区

领取腾讯云代金券