用于学习 Ruby 语法的(哈希部分)
为了像呼吸一样自然地书写Ruby语法,我写这段代码是为了反复练习那些我理解有点模糊的语法。
前提知識 tí zhī shì)
-
- ハッシュは、keyとvalueの組み合わせからなるオブジェクト
-
- JavaScriptでいう連想配列のようなもの
- RubyでいうハッシュのクラスはHash
val = {}
p val.class
=> Hash
-
- 特徴: keyとvalueが大量に格納されている場合でも指定したkeyに対するvalueを高速で取得できます
- 存在しないkeyを指定するとnilがかえってきます
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
p languages['java']
=> nil
前提知識 / 散列字面值
书写方式如下,即使最后有逗号也不会出错。
如果同一个键被多次使用,则以最后一个键为准(就像CSS一样)。
但是,在现场中最好不要使用这种写法。
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django' }
p languages
=> {"ruby"=>"rails", "php"=>"laravel", "python"=>"django"}
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
p languages
=> {"ruby"=>"rails", "php"=>"laravel", "python"=>"django"}
添加哈希
请将新的键值对添加到之前定义的变量languages所代表的哈希表中。
返回
{"ruby"=>"rails", "php"=>"laravel", "python"=>"django", "javascript"=>"react"}
绝对正确的答案
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
languages['javascript'] = 'react'
p languages
参考:针对追求专业的个人的Ruby入门_第148页
覆盖哈希
请在上面定义的变量language中添加新的key和value对到哈希表中,并且编写代码来覆盖现有key的值。
回归
{"ruby"=>"rails", "php"=>"laravel", "python"=>"django", "javascript"=>"vue.js"}
正确答案
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
languages['javascript'] = 'react'
p languages
languages['javascript'] = 'vue.js'
p languages
参考资料: 《为追求成为专业人士而写的Ruby入门指南》第148页
使用哈希进行循环处理
使用each方法对哈希进行操作有以下特点
-
- 引数を2つ用意すればkeyとvalueを取り出せる
keyとvalueのセットは格納した順番に取り出せる
使用哈希表的循环处理/第一题
请编写一个程序来实现以下所示的返回示例。
"ruby => rails"
"php => laravel"
"python => django"
正确答案
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
languages.each do |k,v|
p "#{k} => #{v}"
end
使用哈希表的循环处理 / 第二题
请写一个程序,实现以下类似的返回示例。
"[\"ruby\", \"rails\"]"
"ruby"
"rails"
"[\"php\", \"laravel\"]"
"php"
"laravel"
"[\"python\", \"django\"]"
"python"
"django"
正确答案
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
languages.each do |kv|
p "#{kv}"
p kv[0]
p kv[1]
end
参考:给那些希望成为专业人士的Ruby初学者的Ruby入门_149页
哈希的相等比较
请将哈希进行等值比较,并输出true。
正确答案
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
programming_languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
p languages == programming_languages
=> true
参考:《Ruby入门:专为追求专业的人士设计_150页》
获取哈希表元素的数量
请编写一个程序以获取散列元素的数量。
这是正确答案。
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
p languages.size
p languages.length
=> 3
=> 3
参考书籍:《适合追求专业的人学习的Ruby入门》150页。
删除哈希元素
删除散列元素 / 问题1
请编写一个程序,使用特定的方法删除键并实现以下示例的返回值。
{"php"=>"laravel", "python"=>"django"}
对答案
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
languages.delete('ruby')
p languages
删除哈希元素 / 问题2
在获取已经被删除元素之后的特定键时,请输出nil。
正确的答案
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
languages.delete('ruby')
p languages['ruby']
=> nil
刪除哈希的元素 / 第三題問題
请编写一个程序,以删除特定的键并将哈希表传递给一个代码块,返回值应证明已删除的键的值。
正确答案
languages = { 'ruby' => 'rails', 'php' => 'laravel', 'python' => 'django', }
p languages.delete('ruby') { |v| "#{v}" }
=> "rails"
参考书籍: 为追求专业成就的人准备的Ruby入门指南_150页