在ruby中的键/值哈希中追加值

时间:2014-07-11 13:42:17

标签: ruby-on-rails ruby hash

我试图将特定键和值的散列值附加到特定键和值,然后根据值对它们进行排序。所以这就是我想要做的事情

 @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

对创建的哈希进行排序

我已尝试过的链接1 2

1 个答案:

答案 0 :(得分:2)

根据您的要求,您正在使用Hash,以便以后开展更多工作。您当前的数据结构如下所示:

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

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

如果你重组它以使用id作为关键字,Hash支持您想要实现的功能:

{ 
  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所说的,使用一个有意义的名称代替H {而不是@arr,因为这只会增加混乱。