如何从Ruby嵌套hash中提取所有值并拼接为连续字符串
Ruby on Rails 嵌套Hash字符串拼接实现方案
核心思路为递归遍历嵌套Hash的所有值,按顺序收集字符串类型值后拼接即可,以下是可直接使用的实现:
基础递归实现
def concat_nested_hash_strings(hash) result = [] hash.each_value do |value| if value.is_a?(Hash) # 遇到嵌套Hash则递归提取 result << concat_nested_hash_strings(value) elsif value.is_a?(String) # 遇到字符串直接加入结果集 result << value end end result.join end
测试示例
针对你给出的输入测试:h = {a:"da", b:{c:"test", e:{f:"bird"}}, d:"duck"}
调用concat_nested_hash_strings(h)即可得到返回值 "datestbirdduck",完全符合预期。
精简写法
如果需要更短的实现,可结合flat_map实现:
def concat_nested_hash_strings(hash) hash.values.flat_map do |v| v.is_a?(Hash) ? concat_nested_hash_strings(v) : v.is_a?(String) ? v : nil end.compact.join end
拓展说明
- Ruby 1.9+版本的Hash默认保留键的插入顺序,遍历顺序和你定义Hash时的顺序完全一致,不会出现拼接顺序错乱的问题
- 如果需要同时收集数字、符号等其他类型的值,只需把字符串判断逻辑改为
v.to_s即可适配
内容的提问来源于stack exchange,提问作者DrSnipesMcGee21
相关产品推荐
相关产品推荐

