如何在Ruby中选择数组的最后n%元素?

时间:2014-09-09 17:33:17

标签: ruby arrays elements

我有一个排序数组,我想只保留最后50-60-70%(通常为n%)的元素。我怎样才能做到这一点?

例如

[1,2,3,4,5,6,7,8,9].last(this.size*0.7) 

不起作用。

3 个答案:

答案 0 :(得分:2)

您需要使用tap才能引用您想要的对象。

[1,2,3,4,5,6,7,8,9].tap { |this| break this.last(this.size*0.7) }

需要break因为tap通常会忽略块的返回值。

答案 1 :(得分:1)

我不认识Ruby,但我可以google并猜测。

a = [1,2,3,4,5,6,7,8,9]
a[a.size * 0.6..-1] ==> [6, 7, 8, 9]
a.last(a.size * 0.4) ==> [7, 8, 9]

原因是您首先必须为数组命名,然后才能引用它。在这种情况下,a

您可以在相关文档中查找此类功能:Array

答案 2 :(得分:0)

如果你真的想要你要求的功能,你可以使用#tap来改变像这样的块内的方法链

 [1,2,3,4,5,6,7,8,9].tap do |a| 
    #a is the original array passed into a block
    a.delete_if.with_index{|index,element| element if index + 1 < a.size * 0.7}
 end
 #=> [4,5,6,7,8,9]

请注意,这对原始数组具有破坏性,因为您正在点击它,这似乎不是一个问题,因为您现在还没有将原始数组存储在变量中。

不确定为什么你不想将数组存储在变量中,因为它使程序变得容易。一个简单的方法就足够了

def last_n_percent(array,percent=0.5)
  array.last(array.size * percent)
end