Ruby中的Array上的Each_Slice
发布时间:2020-12-17 02:23:18 所属栏目:百科 来源:网络整理
导读:我希望得到一个嵌套数组,其中包含至少包含三个元素但最多包含四个元素的单个数组.当我到达10时,我遇到了问题: example = [1,2,3,4,5,6,7,8,9,10]example.each_slice(3).to_a = [[1,3],[4,6],[7,9],[10]]example.each_slice(4).to_a = [[1,4],[5,8],[9,10]]
我希望得到一个嵌套数组,其中包含至少包含三个元素但最多包含四个元素的单个数组.当我到达10时,我遇到了问题:
example = [1,2,3,4,5,6,7,8,9,10] example.each_slice(3).to_a = [[1,3],[4,6],[7,9],[10]] example.each_slice(4).to_a = [[1,4],[5,8],[9,10]] 期望的结果是: [[1,10]] (all arrays have 3 elements but no more than 4) each_slice不是这样做的方法吗? 谢谢 解决方法
each_slice生成最大到所需大小的切片;它不会直接完成你想要的东西,这是一种“平衡”的清单.幸运的是,我们可以到达那里.
list = (1..10).to_a slice_count = (list.length / 3.0).floor list.each_slice(slice_count).to_a.each {|l| l.fill nil,slice_count,0 }.transpose.map(&:compact) # => [[1,10],[2,[3,9]] 这不保留顺序,但它确实平衡了值.它的工作方式是它基本上创建一个值的矩阵,其中至少填充每列的前3行,第四列用于捕获溢出. 1 2 3 4 5 6 7 8 9 10 - - 然后使用#transpose从列中创建数组,然后我们压缩以删除nils. 保留订单有点困难,并且需要一些if条件.在这种情况下,具有3/4元素的阵列的期望分布将影响答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |