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

求助:如何将Ruby哈希的键转换为驼峰式格式?

如何将Ruby哈希的键递归转换为驼峰式?

问题描述

给定如下嵌套哈希:

hash = {test_user: '1', user_details: {first_name: "Test"}}

需要将所有键(包括嵌套哈希的键)从蛇形命名转换为驼峰式,期望输出:

output = {testUser: '1', userDetails: {firstName: "Test"}}

原代码的问题分析

你当前的代码存在几个核心问题:

  • 错误地将键转换为全大写,而非驼峰式命名
  • 处理嵌套哈希时,错误复用整个原哈希的键转换结果,导致嵌套结构完全混乱
  • 仅当哈希中存在哈希类型的值时才处理,遗漏了顶层哈希无嵌套的场景
  • 没有递归处理深层嵌套的哈希结构

修正后的代码

我们需要编写一个递归方法来处理所有层级的哈希键转换,同时实现蛇形到驼峰式的正确转换逻辑:

def camelize_keys(hash)
  hash.each_with_object({}) do |(key, value), result|
    # 将蛇形键转换为驼峰式:分割后首词小写,后续词首字母大写再拼接
    camelized_key = key.to_s.split('_').then do |parts|
      parts.first + parts.drop(1).map(&:capitalize).join
    end.to_sym

    # 递归处理嵌套哈希
    result[camelized_key] = value.is_a?(Hash) ? camelize_keys(value) : value
  end
end

# 测试代码
hash = {test_user: '1', user_details: {first_name: "Test"}}
output = camelize_keys(hash)
puts output.inspect

代码说明

  1. 驼峰转换逻辑:
    • 将键转为字符串后用下划线分割成数组
    • 保留第一个单词的小写形式,后续每个单词首字母大写
    • 最后转换回符号(匹配期望输出的符号键格式)
  2. 递归处理嵌套:
    • 遍历哈希的每个键值对,若值是哈希类型,则递归调用camelize_keys方法处理
    • 非哈希类型的值直接保留
  3. 通用性:
    • 无论哈希是否有嵌套,都能正确处理
    • 支持多层深层嵌套的哈希结构

运行结果

执行上述代码后,输出结果与期望完全一致:

{:testUser=>"1", :userDetails=>{:firstName=>"Test"}}

内容的提问来源于stack exchange,提问作者Kumar Nikhil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:07:53