从 Ruby 数据哈希中提取值并将值连接成单个连续字符串
Posted
技术标签:
【中文标题】从 Ruby 数据哈希中提取值并将值连接成单个连续字符串【英文标题】:Extract values from Ruby data hash and concatenate values into single continuous String 【发布时间】:2021-07-28 18:26:09 【问题描述】:我目前正在开发一个 Ruby on Rails 程序,需要一些帮助来找出一种方法来获取嵌套哈希、提取值并将这些值连接到一个字符串中。
一个示例哈希是:
h=a:"da",b:c:"test",e:f:"bird",d:"duck"
我希望输入显示为:
"datestbirdduck"
任何人都可以帮助提供可以做到这一点的方法。我很难找到适用于嵌套哈希的任何内容。
【问题讨论】:
【参考方案1】:由于您的输入 (h
) 是一个可以在其值中包含哈希的哈希,您可以实现该方法以使用递归从值中提取字符串:
input = a: "da", b: c:"test", e: f: "bird", d:"duck"
def extract_values_from_hash(input)
return input unless input.is_a?(Hash)
input.flat_map |_, v| extract_values_from_hash(v)
end
extract_values_from_hash(input).join
# datestbirdduck
它的作用是接收散列 (input
),从中提取添加保护子句的值 - 作为基本情况,如果它是散列对象,则返回调用该方法的参数,否则它会变平并映射调用方法本身的对象。这样您就可以从初始方法参数中提取每个值。
请注意,如果您碰巧有这样的对象,则会提取输入中不是直接哈希的任何内容:
a: "da", b: c:"test", e: f: "bird", d:"duck", g: 1, h: [i: "hola", j: "chao"]
结果是:
"datestbirdduck1:i=>\"hola\":j=>\"chao\""
【讨论】:
非常感谢!喜欢解决方案。我一直在 Rails 控制台中收到一个错误,说堆栈级别由于某种原因太深了。你见过吗? 是的,可能是因为它没有找到摆脱循环的方法。您使用的输入与您在问题中添加的输入完全相同吗? @KortneyStinson 当递归调用太多时会出现这种错误。也许您的哈希嵌套 非常 很深。也可以是散列中的一个循环,例如类似h = ; h[:a] = h
@Sebastian 我确实使用了完全相同的输入。在我重新加载 rails 控制台后它随机停止。嗯,它现在工作得很好!非常感谢!
@Stefan 是的,我认为这可能是个问题,但我重新加载了控制台,它开始完美运行。我将尝试使用我实际使用的更大的散列以上是关于从 Ruby 数据哈希中提取值并将值连接成单个连续字符串的主要内容,如果未能解决你的问题,请参考以下文章