从 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 数据哈希中提取值并将值连接成单个连续字符串的主要内容,如果未能解决你的问题,请参考以下文章

从数据条目(如工作表)复制值并将它们粘贴到单个工作表中,根据一个单元格中的某个值连续粘贴

从 SQL 中提取一列值并将它们放入数组 VBA [关闭]

如何在Javascript中从数组中提取值

ruby 符号作为键,但无法从哈希中获取值

Ruby - NoMethodError:未定义的哈希方法

使用循环从文件中读取和提取有用数据无法生成值列表