You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中Enumerable#each_slice使用问题:数组按2元素分片后排序切片失败

解决你的Ruby数组切片排序问题

嘿,我来帮你排查这段代码的问题~先看看你写的代码:

def sorted_pairs(array)
  sorted_pairs = []
  array.each_slice(2).to_a { |group| sorted_pairs << group.sort }
end

问题出在哪?

  1. 块的位置错误:each_slice(2).to_a 这个写法里,to_a方法不接受块参数,你把块加在to_a后面完全不会被执行,相当于白写了这部分逻辑。
  2. 方法无有效返回值: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:58:11