Ruby中按Hash数组指定位置值分组的实现方法
Ruby哈希按值数组指定位置元素分组的高效实现
可以用Ruby内置的group_by和transform_values方法高效实现,不需要手动维护额外数组或嵌套结构,单次遍历即可完成分组。
针对你给出的具体哈希,按数组第二个元素(索引为1)分组的代码如下:
original_hash = { key1: ["Cop", "dog", "house"], key2: ["doctor", "cat", "apartment"], key3: ["Chef", "dog", "house"], key4: ["Cop", "cat", "apartment"] } # 指定要分组的数组位置(第二个元素对应索引1) group_position = 1 # 执行分组并整理结果 grouped_hash = original_hash.group_by do |original_key, value_arr| # 将分组依据的字符串转为符号,匹配预期输出的key格式 value_arr[group_position].to_sym end.transform_values do |key_value_pairs| # 提取每组中的原哈希key key_value_pairs.map(&:first) end # 输出结果 p grouped_hash # => {:dog=>[:key1, :key3], :cat=>[:key2, :key4]}
关键说明:
group_by:Ruby内置方法,仅遍历原哈希一次,按指定规则将键值对分组,返回的哈希以分组依据为key,对应原键值对数组为value,效率极高。transform_values:遍历分组后的哈希值,将每个组的键值对数组转换为原哈希的key数组,完成结果整理。- 灵活性:只需修改
group_position的值,就能按数组任意位置的元素分组(比如按第一个元素分组就设为0)。
这个实现的时间复杂度为O(n)(n为原哈希的键值对数量),完全符合你对效率的要求,没有多余的数组嵌套操作。
内容的提问来源于stack exchange,提问作者user19408396
相关产品推荐
相关产品推荐

