考虑@data是一个带有日期、类、名称和等级字段的Active记录数组。假设我想以两个哈希结束,一个是每个名称的所有日期的唯一集合;另一个按类、日期和名称细分以显示等级。
dates = {}
grades = {}
@data.each do |d|
dates[ d.name ][ d.date ] = '' # 1
grades[ d.class => { d.date => { d.name => d.grade } } ] # 2
end
>
导致错误:
nil:NilClass的未定义方法“[]=”
日期[d.name=
不会出错,但以空哈希<code>{}</code>结尾
回到Perl后,我忘记了如何在Ruby中初始化和添加哈希哈希。
对于第一个(日期),看起来我可以在循环中执行以下操作:
dates[ d.name ] ||= { d.date => '' }
dates[ d.name ][ d.date ] = ''
查看文档,我不知道这是否是正确的方法,它似乎效率低下,因为它将为第一个值执行两次赋值。它还建议对于每个键,我需要声明/初始化底层数据结构,哈希的哈希值越深(如等级哈希值)就会变长。
资料来源:
[{ name: 'greg', class:'science', date:'jan', grade:'a' },
{ name: 'greg', class:'math' , date:'jan', grade:'b' },
{ name: 'barb', class:'history', date:'jan', grade:'a' },
{ name: 'barb', class:'science', date:'feb', grade:'c' }]
日期应该是这样的:
{ 'greg' => { 'jan' => '' },
'barb' => { 'jan' => '' ,
'feb' => ''
}
}
分数看起来像:
{ 'science' => { 'jan' => { 'greg' => 'a' } ,
'feb' => { 'barb' => 'c' } },
'math' => { 'jan' => { 'greg' => 'b' } },
'history' => { 'jan' => { 'barb' => 'a' } }
}
这实际上是可行的,因为当您试图从散列中访问键时,它不仅返回默认值,而且还设置它:
Hash.new do |h, k|
h[k] = Hash.new do |hh, kk|
hh[kk] = {}
end
end
更新:
这可能更干净一点,尽管对未来的开发人员来说可能比仅仅检查是否为nil更令人困惑。
dates = Hash.new { |hash, key| hash[key] = {} }
grades = Hash.new { |hash, key| hash[key] = dates.clone }
我能够像这样构建日期哈希:
arr = [{ name: 'greg', class:'science', date:'jan', grade:'a' },
{ name: 'greg', class:'math' , date:'jan', grade:'b' },
{ name: 'barb', class:'history', date:'jan', grade:'a' },
{ name: 'barb', class:'science', date:'feb', grade:'c' }]
dates = arr.group_by { |x| x[:name] }.each_with_object({}) do |(k, v), hash|
dates = v.map { |i| i[:date] }.uniq
dates_hash = dates.each_with_object({}) { |date, h| h[date] = "" }
hash[k] = dates_hash
end
puts dates
{"greg"=>{"jan"=>""}, "barb"=>{"jan"=>"", "feb"=>""}}
尝试使用:
d={}
c=Client.first
d[c.last_name]=[]
d[c.last_name][c.id]=//your value
d[c .姓氏]=[],初始化c .姓氏的哈希数组
主要内容:创建哈希,实例,实例,哈希内置方法,实例哈希(Hash)是类似 "key" => "value" 这样的键值对集合。哈希类似于一个数组,只不过它的索引不局限于使用数字。 Hash 的索引(或者叫"键")几乎可以是任何对象。 Hash 虽然和数组类似,但却有一个很重要的区别:Hash 的元素没有特定的顺序。 如果顺序很重要的话就要使用数组了。 创建哈希 与数组一样,有各种不同的方式来创建哈希。您可以通过 new 类方法创建一个空的哈希:
本章节我们学习另外一个可以组合多个的对象类——哈希,了解哈希是什么,如何创建一个哈希以及哈希对象的实例方法。 1. 什么是哈希 哈希是键值对的集合。—— 官方定义 哈希是另一种非常有用且广泛使用的东西,可用于存储其他对象。与仅作为列表的数组不同,哈希表就像字典。我们通过键(key)来查找哈希中的值(value)。好比我们有一个英汉词典,我们通过查找“hello的单词来找到中文意思"你好",此时,“
所以我使用gem文件从reddit的首页拉链接。gem函数返回一个哈希,其中包含首页上的所有链接及其所有信息(评论、业力、作者、日期、链接、上升、下降等的#)。下面是包含我首页上第一个链接信息的哈希请求: {"modhash"= 结尾<code>,</code>分隔下一个链接,如下所示: {“种类”= 我基本上需要某种方法来解析这个散列的每个条目,这样我就可以将所有相关的东西存储到一个数组中。实际
问题内容: 我可以使用一种方法 但是我该如何以user_lib的身份重新找回它? 问题答案: 您想要或: 此处的关键是用作从磁盘加载JSON字符串的一种简单方法,以便可以对其进行解析。或者,如果文件中包含UTF-8数据: 我已经链接到上面的JSON文档,所以您应该阅读它以获取更多详细信息。但总而言之: —在特定对象上创建JSON字符串的方法。 —从对象创建JSON字符串。 —创建一个JSON字符串
我正在尝试使用Sinatra和BCrypt实现一种看似非常简单的身份验证方法,但显然我遗漏了一些东西... 用户会预先分配一个临时密码,该密码以明文形式存储在DB中。 我根据临时口令进行身份验证,然后创建salt和password_hash,并将它们作为字符串写入db(本例中为mongo)。 为了进行身份验证,我从db和用户口令中获取salt进行比较。 bcrypt::Engine.hash_se
问题内容: 当大小超过maxthreshold值时,如何在哈希表或哈希表中进行重新哈希处理? 是否所有对都已复制到新的存储桶阵列中? 编辑: 重新哈希后,同一存储桶(位于链接列表中)中的元素会发生什么情况?我的意思是说,他们在重新哈希处理后会留在同一个桶中吗? 问题答案: 问题中的最大阈值称为负载系数。 建议负载系数约为0.75。负载因子定义为(m / n),其中n是哈希表的总大小,m是在需要增加