Ruby/Rails中实现提取嵌套哈希内值为字符串的元素
嵌套哈希字符串值筛选实现方案
你可以通过递归方法处理多层嵌套结构,以下是适配Ruby 2.7和Rails 6的可直接运行的代码:
def filter_string_values(hash) hash.each_with_object({}) do |(key, value), result| if value.is_a?(Hash) nested_filtered = filter_string_values(value) # 纯Ruby环境可将present?替换为 !nested_filtered.empty? result[key] = nested_filtered if nested_filtered.present? elsif value.is_a?(String) result[key] = value end end end # 调用方法即可得到目标结果 filtered_hash = filter_string_values(hash)
运行上述代码后得到的输出与你期望的结果完全一致:
{ language: 'EN', details: { resultRanges: { book: { title: 'Dunder Mifflin', label: 'gray', }, }, }, }
逻辑说明
- 遍历哈希的每一组键值对,根据值的类型做分支处理
- 若值为嵌套哈希,优先递归处理该子哈希,仅当处理后子哈希存在有效内容时保留该层级键
- 若值为字符串类型,直接保留当前键值对
- 布尔值、数值等其他非目标类型会被自动过滤
如果你的使用场景中存在数组嵌套哈希的情况,只需要补充对应数组类型的分支判断,递归处理数组元素即可。
内容的提问来源于stack exchange,提问作者mr_muscle
相关产品推荐
相关产品推荐

