Ruby Hash基础知识
散列 是一种数据结构,它维护着一组被称为键的对象,每个键都与它的值相关联。简单地说,哈希是一个唯一的键和它们的值的集合。散列有时被称为 关联数组 ,因为它将值与每个键关联起来,但散列和数组之间有区别。数组总是使用一个整数值进行索引,而哈希则使用对象。哈希值也被称为 Map ,因为它们将键映射到值。
哈希字面或创建哈希: 哈希是用哈希字面创建的,哈希字面是一个用逗号分隔的键/值对列表,它总是包含在大括号{}中。有不同的方法来创建散列。
- 使用新的类方法:新的类方法将创建一个空的哈希值,意味着创建的哈希值没有默认值。
语法:
hash_variable = Hash.new
示例:
geeks = Hash.new
这将创建一个空的hash geeks。你也可以通过以下两种方式为geeks提供默认值:
geeks = Hash.new("GFG")
or
geeks = Hash.new "GFG"
这里GFG是默认值。只要键或值不存在于上述哈希中,那么访问哈希将返回默认值 “GFG”。为了提供键/值对,你必须修改哈希值,这将在本文中讨论。
- 使用{}大括号:在这个哈希变量后面是=和大括号{}。在大括号{}之间,键/值对被创建。
语法:
hash_variable = {"key1" => value1, "key2" => value2}
获取哈希值: 要获取一个哈希值,必须将所需的键放在方括号[]内。
例子
# Ruby program to demonstrate the creation
# of hashes and fetching the hash values
#!/usr/bin/ruby
# Creating a hash using new class method
# without the default value
geeks = Hash.new
# empty hash will return nothing on display
puts "#{geeks[4]}"
# creating hash using new class method
# providing default value
# this could be written as
# geeks = Hash.new "GFG"
geeks_default = Hash.new("GFG")
# it will return GFG for every index of hash
puts "#{geeks_default[0]}"
puts "#{geeks_default[7]}"
# creating hash using {} braces
geeks_hash1 = {"DS" => 1, "Java" => 2}
# fetching values of hash using []
puts geeks_hash1['DS']
puts geeks_hash1['Java']
输出
GFG
GFG
1
2
在Ruby中修改哈希值: 哈希值可以通过在已经存在的哈希值中添加或删除一个键值/对来修改。同时,你也可以改变哈希中现有的键值。
例子
# Ruby program to demonstrate the modifying of hash
#!/usr/bin/ruby
# creating hash using {} braces
geeks_hash1 = {"DS" => 1, "Java" => 2}
puts "Before Modifying"
# fetching values of hash using []
puts geeks_hash1['DS']
puts geeks_hash1['Java']
puts "\n"
puts "After Modifying"
# modifying hash values
geeks_hash1["DS"] = 4
geeks_hash1["Java"] = 5
# fetching values of hash using []
puts geeks_hash1['DS']
puts geeks_hash1['Java']
输出
Before Modifying
1
2
After Modifying
4
5
注意: 每当用户为散列中的同一个键提供两个不同的值时,该键的前一个值就会被该键的最新值所覆盖。另外,程序将成功运行,但会给出一个警告,如下面的例子所示。
# Ruby program to demonstrate the modifying hash
#!/usr/bin/ruby
# creating hash using {} braces
# providing two different values to key "DS"
geeks_hash1 = {"DS" => 1, "DS" => 4,"Java" => 2}
puts "Before Modifying"
# fetching values of hash using []
puts geeks_hash1['DS']
puts geeks_hash1['Java']
puts "\n"
puts "After Modifying"
# modifying hash values
geeks_hash1["DS"] = 4
geeks_hash1["Java"] = 5
# fetching values of hash using []
puts geeks_hash1['DS']
puts geeks_hash1['Java']
输出
Before Modifying
4
2
After Modifying
4
5
main.rb:7: warning: key "DS" is duplicated and overwritten on line 7