从 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\"}"
我目前正在 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\"}"