首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建1-和2维散列

如何创建1-和2维散列
EN

Stack Overflow用户
提问于 2016-07-31 14:05:14
回答 2查看 1.2K关注 0票数 0

我正在从数据库中加载数据并将其保存到如下常量中:

代码语言:javascript
复制
profession = Hash.new
Profession.all.each do |p|
  profession[p.name] = p.unique_profession
  profession[p.name]['descr'] = p.description # problem
  profession[p.name]['created_at'] = p.created_at # problem
end

在行profession[p.name]['descr']上发生以下错误:

代码语言:javascript
复制
undefined method `[]=' for 1:Fixnum (NoMethodError)

我想使用profession,比如:

代码语言:javascript
复制
<div>Profession name: <%= profession[p.name] %></div>
<div>Description: <%= profession[p.name]['descr'] %></div>

如何使profession作为一个[name]和两个[name][descr]参数使用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-31 14:51:19

从空哈希开始:

代码语言:javascript
复制
{}

然后,对于每个职业记录,您都分配profession[p.name] = p.unique_profession。假设unique_profession是一个Fixnum,这意味着您可以得到以下内容:

代码语言:javascript
复制
{
  'ProfessionName1' => 1,
  'ProfessionName2' => 2
}

诸若此类。

你不能给Fixnum分配子键-这不是散列。相反,您可能需要以下数据结构之一(我将按照该结构使用代码创建它):

代码语言:javascript
复制
{
  'ProfessionName1' => {
    'descr' => 'Description of Profession 1',
    'created_at' => '2016-05-08T22:33:38.093753Z'
  },
  'ProfessionName2' => {
    'descr' => 'Description of Profession 2',
    'created_at' => '2015-04-09T21:23:33.093753Z'
  }
}
代码语言:javascript
复制
profession = Hash.new
Profession.all.each do |p|
  profession[p.name] = Hash.new
  profession[p.name]['descr'] = p.description
  profession[p.name]['created_at'] = p.created_at
end

或者仅仅是包含每个属性的散列数组:

代码语言:javascript
复制
[
  {
    'name' => 'ProfessionName1',
    'descr' => 'Description of Profession 1',
    'created_at' => '2016-05-08T22:33:38.093753Z'
  },
  {
    'name' => 'ProfessionName2',
    'descr' => 'Description of Profession 2',
    'created_at' => '2015-04-09T21:23:33.093753Z'
  }
]
代码语言:javascript
复制
profession = []
Profession.all.each do |p|
  profession << {
    'name' => p.name,
    'descr' => p.description,
    'created_at' => p.created_at
  }
end
票数 1
EN

Stack Overflow用户

发布于 2016-07-31 14:54:11

如果要使用散列,则需要将“unique_profession”存储到新密钥中。

代码语言:javascript
复制
profession = Hash.new
Profession.all.each do |p|
  profession[p.name] = []
  profession[p.name]['unique'] = p.unique_profession
  profession[p.name]['descr'] = p.description # problem
  profession[p.name]['created_at'] = p.created_at # problem
end

然后您就可以这样做了(但是注意输出将是一个数字,unique_profession的内容):

代码语言:javascript
复制
<div>Profession name: <%= profession[p.name]['unique'] %></div>
<div>Description: <%= profession[p.name]['descr'] %></div>

最后,我建议使用符号而不是字符串(因为这就是Ruby的方式):

代码语言:javascript
复制
profession = Hash.new
Profession.all.each do |p|
  profession[p.name] = []
  profession[p.name][:unique] = p.unique_profession
  profession[p.name][:descr] = p.description
  profession[p.name][:created_at] = p.created_at
end

然后

代码语言:javascript
复制
<div>Profession name: <%= profession[p.name][:unique] %></div>
<div>Description: <%= profession[p.name][:descr] %></div>

另一方面,您可以直接存储和使用专业实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38684770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档