Ruby如何实现数组尽可能均匀分割?含奇偶元素分割需求
解决Ruby数组均匀分割成两部分的问题
你可以通过计算分割中点,再结合数组切片或者each_slice来实现需求,具体方法如下:
方法1:直接切片分割
先算出分割的中点,对于奇数长度的数组,中点取(数组长度 + 1) // 2(保证前半部分比后半部分多1个元素),偶数长度则刚好是长度的一半。然后用数组切片拆分:
def split_into_two(array) mid_point = (array.length + 1) // 2 [array[0...mid_point], array[mid_point..-1]] end # 测试示例 array = [5, 1, 3, 8, 7] split_into_two(array) #=> [[5, 1, 3], [8, 7]] # 偶数长度测试 even_array = [1, 2, 3, 4] split_into_two(even_array) #=> [[1, 2], [3, 4]]
方法2:结合each_slice实现
如果你想用each_slice,需要先算出正确的切片长度,再转换为数组即可:
array = [5, 1, 3, 8, 7] mid_point = (array.length + 1) // 2 array.each_slice(mid_point).to_a #=> [[5, 1, 3], [8, 7]]
你之前用each_slice没得到预期效果,应该是直接用了array.length / 2作为切片长度(比如5个元素时是2),这样会切成多个小片段,而不是两部分。只要先算出正确的中点长度,each_slice也能满足需求。
内容的提问来源于stack exchange,提问作者Devon
相关产品推荐
相关产品推荐

