向Hash添加增加键

时间:2014-05-15 10:44:57

标签: ruby

PHP允许像这样向数组添加值:

array[]='a' # result: arr[0]='a'
array[]='a' # result: arr[1]='a'
...

如何用Ruby实现类似的结果?

更新: 忘了说,我需要在里面做一些额外的哈希,比如

'a'=>{1=>1}...

更新2: 第一次更新可能有点令人困惑,所以有我的完整资源,它不起作用。它必须在会话[:items] [0],会话[:items] [1] ......中创建@value哈希的多个记录...

@value = {'id'=>id, 'quantity'=>1, "property_categories"=>params[:property_categories]}

if !session[:items].present?
  session[:items] = @value
else 
  session[:items].push(@value)
end

更新3: 数据应如下所示:

[0=>{'id'=>id, 'quantity'=>1, "property_categories"=>{1=>1}},
1=>{'id'=>id, 'quantity'=>1, "property_categories"=>{1=>1}}]...

3 个答案:

答案 0 :(得分:3)

这应该有效:

arr << 'a'

或者这个:

arr.push('a')

来源:http://www.ruby-doc.org/core-2.1.1/Array.html

答案 1 :(得分:2)

只需使用<<

推送到数组
array = []
array << 'a' # array == ["a"]
array << 'a' # array == ["a", "a"]

答案 2 :(得分:2)

在您的代码中,如果session[:items]不存在,您将为其分配@valueHash)。所以下次它会尝试将项目推送到哈希。

如果Array需要session[:items],则应该可以使用

if !session[:items].present?
  session[:items] = [@value] # Here create an array with @value in it
else 
  session[:items].push(@value)
end

修改    我看到你已经更新了你的问题。所以这是我更新的答案

if !session[:items].present?
  session[:items] = { 0 => @value }
else
  session[:items][ session[:items].keys.max + 1 ] = @value
end