【问题标题】:Iterate over an array of hashes and add to the value of specific hash values遍历散列数组并添加到特定散列值的值
【发布时间】:2018-02-05 14:30:04
【问题描述】:

如果你有一个哈希数组,例如:

t = [{'pies' => 1}, {'burgers' => 1}, {'chips' => 1}]

1 添加到具有特定键(例如'pies')的散列值中的有效且易读的方法是什么?

【问题讨论】:

  • 为什么你有一个哈希数组而不只是一个哈希?

标签: arrays ruby hash


【解决方案1】:

这是根据所需键递增数组哈希值的一种方法:

t = [{ 'pies' => 1 }, { 'burgers' => 1 }, { 'chips' => 1 }]

t.each { |hash| hash['pies'] += 1 if hash.key?('pies') }
# => [{"pies"=>2}, {"burgers"=>1}, {"chips"=>1}]

希望这会有所帮助!

【讨论】:

  • 抱歉我稍微编辑了这个问题,但是谢谢
  • 别担心,新版本问题的更新答案
【解决方案2】:

如果您知道只有一个哈希可以获取键“馅饼”,那么您可以使用 find 并增加它的值,例如:

array = [{ 'pies' => 1 }, { 'burgers' => 1 }, { 'chips' => 1 }]
pies_hash = array.find { |hash| hash['pies'] }
pies_hash['pies'] += 1
p array
# [{"pies"=>2}, {"burgers"=>1}, {"chips"=>1}]

Enumerable#find会尝试找到满足block的元素,当返回true时停止迭代。

【讨论】:

    【解决方案3】:

    您使用了错误的数据结构。我建议使用哈希。

    菜单上的每个项目只能有一个计数(或销售),即每个项目都是独一无二的。这可以使用具有唯一键(项目)及其对应值(计数)的哈希来建模。

    t = {'pies' => 1, 'burgers' => 1, 'chips' => 1}
    

    然后我们可以访问密钥并添加到计数中:

    t['pies'] += 1
    t #=> t = {'pies' => 2, 'burgers' => 1, 'chips' => 1}
    

    【讨论】:

      猜你喜欢
      • 2012-08-03
      • 2018-06-29
      • 1970-01-01
      • 2019-01-31
      • 2023-04-10
      • 2016-08-03
      • 2011-01-15
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多