【问题标题】:How to retrieve values from hash:Hashie::Mash如何从 hash:Hashie::Mash 中检索值
【发布时间】:2019-11-24 21:03:01
【问题描述】:

我试图从这个 Hashie 中检索每周预算总和,但没有成功。

#sample hashie
#client_budget_items

849:
- !ruby/hash:Hashie::Mash
  id: 511144069
  weekly_budget: 5
  client_id: 55
850:
- !ruby/hash:Hashie::Mash
  id: 511144064
  weekly_budget: 30
  client_id: 55
851:
- !ruby/hash:Hashie::Mash
  id: 511144066
  weekly_budget: 10
  client_id: 65
852:
- !ruby/hash:Hashie::Mash
  id: 511144070
  client_id: 65
  weekly_budget: 20

我试过了:

weekly_budgets = client_budget_items.map{|y| y[:weekly_budget]}.compact

获取数组中的所有值,然后将其相加,但我不断得到:

no implicit conversion of Symbol into Integer

如何遍历 Hashie::Mash?

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。请参阅:How to create a Minimal, Reproducible Example。您的代码目前什么都不做。提供一些能实际证明问题的东西。
  • @theTinMan,关于我应该如何改进它的任何提示?当我尝试将结果映射到列表中时,我得到no implicit conversion of Symbol into Integer,因为我输入了问题
  • 提供包含所需require 语句的最小代码,将数据加载到字符串中(此处的文档对此很有用),然后展示您如何尝试处理它。数据基本上是YAML,因此文档解释了如何从字符串加载。另见stackoverflow.com/a/11726198/128421。尝试多次,如果仍然无法解决,请提出具体问题。
  • 作为提示,weekly_budget 不是符号,您必须在每个哈希值中的嵌套数组中导航。为了好玩,还有schneems.com/2014/12/15/hashie-considered-harmful.htmlcode.dblock.org/2017/02/24/…
  • @theTinMan 哦,天哪,第二篇文章的标题让我笑得很厉害。在遗留系统上为此苦苦挣扎了大约两天。感谢您的链接

标签: ruby-on-rails ruby hash


【解决方案1】:

对于任何偶然发现这个哈希地狱的人,这就是我为解决我的问题所做的。

将其转化为数组:

by_uniq_client_id = clients_budget_items.values.map{|y| y.uniq{|t| t.client_id }} 

weekly_budgets = by_uniq_client_id.flatten.map{|x| x.weekly_budget}

【讨论】:

  • 很高兴您可以使用它,但是此代码与您问题中的变量不匹配,并且对于其他寻求解决相同问题的人来说,它无助于提供有效的解决方案。
  • flat_map 可能很有用。再次,请阅读第一和第三个 cmets。您提供的代码应该是可运行的,无需添加额外的代码。在 SO 上,我们提出并回答问题是为了帮助他人,而不仅仅是满足您的需求。其中一部分是提供用于演示问题的代码,而无需任何人添加额外的代码来使其工作。这在stackoverflow.com/help/minimal-reproducible-example中有详细说明。
猜你喜欢
  • 1970-01-01
  • 2018-04-14
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多