【问题标题】:appending values in key/value hash in ruby在红宝石的键/值哈希中附加值
【发布时间】:2014-07-11 22:15:16
【问题描述】:

我正在尝试在特定于特定键和值的哈希中附加值,然后根据值对它们进行排序。所以这就是我想要做的事情

 @arr = Hash.new
 $m.each do |s|
  if (s.start.hour == check.hour)
    if params[:type] == 'A'
      s.As.each do |w|
          @arr['name'].push((w.name))
          @arr['id'].push((w.id).to_i)
      end
    end
  end
end

很明显,我只会得到最后一个值,但我不知道如何为这个散列附加这些值。 对 ruby​​ 不太熟悉,因此对此表示赞赏,并了解如何根据 'id's in @arr 对创建的哈希进行排序

我已经尝试过的链接12

【问题讨论】:

  • 对链接到问题的评论与此处相关:What result are you getting? In such a question it is helpful if you include "I expected result <X> but got result <Y>"
  • 为什么要附加到哈希中的两个数组?如果您需要按id 排序的哈希,为什么不使用id 作为键并为其添加值?
  • 实际上我也在尝试做同样的事情,但不知道该怎么做,因为在 javascript 中很容易
  • 那没有回答我的问题。你现在得到什么结果?
  • 请不要使用变量名@arr 来引用哈希。谢谢。

标签: ruby-on-rails ruby hash


【解决方案1】:

根据您的要求,您使用哈希的方式可以在以后进行更多工作。您当前的数据结构将如下所示:

{ 
  id:   [ 1, 2, 3 ],
  name: [ a, b, c ] 
}

这意味着您必须使用数组和索引来对id 和name 进行排序和排列。

如果您将其重组为使用id 作为键,则哈希支持您尝试实现的开箱即用:

{ 
  1: { name: a },
  2: { name: b },
  3: { name: c }
} 

为此,您可以像这样为循环中的哈希分配值:

@arr[w.id.to_i] = { "name" => w.name }

那么你的Hash就可以被访问了,顺序是:

@arr.sort.map do |id, value|
  # work with id and value["name"]
end

重申 Mark Thomas 指出的内容,为 Hash 使用有意义的名称而不是 @arr,因为这只会增加混乱。

【讨论】:

  • +1。很好的解决方案。实际上,为所有变量使用有意义的名称会很好..
  • 真的! @arr 虽然特别糟糕:/
猜你喜欢
  • 2011-08-10
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2015-12-03
相关资源
最近更新 更多