转移阵列的前1/3?

时间:2014-04-22 04:04:18

标签: ruby arrays shift pop

有没有办法在一行中将此[1, 2, 3, 4, 5, 6, 7, 8, 9]转换为此[4, 5, 6, 7, 8, 9]

现在我计划将它分配给变量,获取长度,并使用shift函数。没关系,只是想知道是否有更多的Rubyish方式来做它

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a.shift(a.length/3)

2 个答案:

答案 0 :(得分:1)

不使用Array#slice

进行变异
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a[(a.length/3)..-1]
#=> [4, 5, 6, 7, 8, 9] 

一个变异的选项,是一个单行

[1, 2, 3, 4, 5, 6, 7, 8, 9].tap { |a| a.shift(a.length/3) }
#=> [4, 5, 6, 7, 8, 9]

答案 1 :(得分:0)

如果您申请代码,您将获得:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a.shift(a.length/3) # => [1,2,3]

但是在操作数组a将包含您需要的内容之后:

a # => [4, 5, 6, 7, 8, 9]

因此,例如明显的variat要转移:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
(a.length/3).times {|a| a.shift }
a # => [4, 5, 6, 7, 8, 9]

当然,您可以获得所需的数组值,因为它由bjhaid表示。