#take_while和#select之间的区别

时间:2016-12-14 21:56:20

标签: ruby

#take_while#select

之间有何区别?

不要两种方法做同样的事情吗?

p [1,2,3,4].take_while { |e| e < 3 } # prints [1,2]
p [1,2,3,4].select     { |e| e < 3 } # prints [1,2]

2 个答案:

答案 0 :(得分:3)

take_while 返回所有先前元素的数组,直到该块返回nil或false。

select 返回一个数组,其中包含块返回true值的元素。例如,如果您有[1,2,3,4,1] 选择将返回[1,2,1]

|/webapp
 |/WEB-INF
  |web.xml
 |login.jsp
 |error.jsp
 |index.jsp

take_while 会返回[1,2]

p [1,2,3,4,1].select { |e| e < 3 } # prints [1,2,1]

答案 1 :(得分:2)

存在差异,take_while从块中的评估为假时停止,select将继续并评估所有内容。

[1,2,3,4,1].take_while{ |e| e < 3 } # prints [1,2]
[1,2,3,4,1].select{ |e| e < 3 } # prints [1,2,1]