Ruby中Enumerable#each_slice使用问题:数组按2元素分片后排序切片失败
解决你的Ruby数组切片排序问题
嘿,我来帮你排查这段代码的问题~先看看你写的代码:
def sorted_pairs(array) sorted_pairs = [] array.each_slice(2).to_a { |group| sorted_pairs << group.sort } end
问题出在哪?
- 块的位置错误:
each_slice(2).to_a这个写法里,to_a方法不接受块参数,你把块加在to_a后面完全不会被执行,相当于白写了这部分逻辑。 - 方法无有效返回值:Ruby方法默认返回最后一行代码的结果,你的方法最后一行是
end,所以会返回nil,这肯定不是你想要的最终数组。
修正后的代码
这里给你两种可行的写法,第二种更符合Ruby的简洁风格:
写法1:修正块的位置并确保返回结果
def sorted_pairs(array) sorted_pairs = [] array.each_slice(2) do |group| # 直接在each_slice后接块,去掉多余的to_a sorted_pairs << group.sort end sorted_pairs # 手动返回处理后的数组 end
写法2:用map简化逻辑(推荐)
map方法会自动遍历每个元素并返回新数组,不用手动初始化空数组:
def sorted_pairs(array) array.each_slice(2).map { |group| group.sort } end
测试一下
调用这个方法试试:
puts sorted_pairs(["z", "a", "m", "b"]).inspect # 输出:[["a", "z"], ["b", "m"]]
这样就完美实现了把数组切成2元素切片,再对每个切片按字母排序的需求啦~
内容的提问来源于stack exchange,提问作者Sneha Sunny
相关产品推荐
相关产品推荐

