求助:Ruby数组如何按多元素值分组并添加分组计数
解决方案
首先纠正你代码里的核心问题:你用了w[3]、w[4]作为分组依据,但原数组的子元素只有3个元素(索引0、1、2),分组应该基于第一个(索引0)和第二个(索引1)元素。
以下是实现你需求的完整代码:
list = [["10", "20", "1"], ["10", "30", "1"], ["10", "30", "1"]] # 按子数组的第1、2个元素分组 grouped = list.group_by { |item| [item[0], item[1]] }.values # 处理每个分组:给第一个元素追加组的长度,保留其他原元素 processed_groups = grouped.map do |group| # 复制第一个元素避免修改原数组,再追加组长度 modified_first = group.first.dup << group.length # 组合成新的分组数组 [modified_first] + group[1..-1] end # 给每个分组再包裹一层数组,匹配你要的格式 final_result = processed_groups.map { |g| [g] } puts final_result.inspect # 输出结果:[[["10", "20", "1", 1]], [["10", "30", "1", 2], ["10", "30", "1"]]]
你之前代码的问题分析
- 索引错误:原数组子元素只有3个,索引是0、1、2,你误用了3、4,导致分组逻辑完全错误。
- 多余语法:
list.group_by{|w| w; [w[3], w[4]]}里的w;是无效代码,不影响逻辑但完全多余。 - 格式缺失:你最后那段接近的代码
sub_group.each{|group| group[0] << group.length},没有给每个分组再包裹一层数组,所以和期望格式有差距;而且直接修改原数组元素,建议用dup复制后修改更安全。
内容的提问来源于stack exchange,提问作者JoMojo
相关产品推荐
相关产品推荐

