从 Ruby 数据散列中提取值并将值连接成单个连续字符串

Extract values from Ruby data hash and concatenate values into single continuous String

我目前正在 Ruby Rails 程序上工作,需要一些帮助来找出一种方法来接受嵌套哈希、提取值并将这些值连接在一起一个字符串。

示例哈希为:

h={a:"da",b:{c:"test",e:{f:"bird"}},d:"duck"}

我希望输入显示如下:

"datestbirdduck"

有没有人能提供可以做到这一点的方法。我很难找到适用于嵌套哈希的任何东西。

由于您的输入 (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),从中提取添加保护子句的值 - 作为基本情况,returns 如果它是调用方法的参数哈希对象,否则它会展平并映射调用方法本身的对象。这样您就可以从初始方法参数中提取每个值。

请注意,如果您碰巧有这样的对象,这会提取输入中不是直接散列的任何内容:

{a: "da", b: {c:"test", e: {f: "bird"}}, d:"duck", g: 1, h: [{i: "hola"}, {j: "chao"}]}

结果将是:

"datestbirdduck1{:i=>\"hola\"}{:j=>\"chao\"}"