推荐答案
在 Ruby 中,哈希(Hash)是一种非常常用的数据结构,提供了多种方法来操作和访问数据。以下是一些常用的哈希方法:
[]和[]=:用于访问和设置哈希中的值。keys:返回哈希中所有的键。values:返回哈希中所有的值。has_key?或key?:检查哈希中是否包含指定的键。has_value?或value?:检查哈希中是否包含指定的值。each:遍历哈希中的键值对。merge:合并两个哈希。delete:删除哈希中指定的键及其对应的值。clear:清空哈希中的所有键值对。size或length:返回哈希中键值对的数量。empty?:检查哈希是否为空。invert:交换哈希中的键和值。fetch:获取指定键的值,如果键不存在可以指定默认值或块。default和default=:设置或获取哈希的默认值。to_a:将哈希转换为数组。
本题详细解读
[] 和 []=
[] 方法用于访问哈希中指定键的值,而 []= 方法用于设置或更新哈希中指定键的值。
hash = { a: 1, b: 2 }
puts hash[:a] # 输出 1
hash[:c] = 3
puts hash # 输出 { a: 1, b: 2, c: 3 }keys 和 values
keys 方法返回哈希中所有的键,values 方法返回哈希中所有的值。
hash = { a: 1, b: 2 }
puts hash.keys # 输出 [:a, :b]
puts hash.values # 输出 [1, 2]has_key? 和 has_value?
has_key? 或 key? 方法用于检查哈希中是否包含指定的键,has_value? 或 value? 方法用于检查哈希中是否包含指定的值。
hash = { a: 1, b: 2 }
puts hash.has_key?(:a) # 输出 true
puts hash.has_value?(3) # 输出 falseeach
each 方法用于遍历哈希中的键值对。
hash = { a: 1, b: 2 }
hash.each { |key, value| puts "#{key}: #{value}" }
# 输出:
# a: 1
# b: 2merge
merge 方法用于合并两个哈希。如果键冲突,后者的值会覆盖前者的值。
hash1 = { a: 1, b: 2 }
hash2 = { b: 3, c: 4 }
puts hash1.merge(hash2) # 输出 { a: 1, b: 3, c: 4 }delete
delete 方法用于删除哈希中指定的键及其对应的值。
hash = { a: 1, b: 2 }
hash.delete(:a)
puts hash # 输出 { b: 2 }clear
clear 方法用于清空哈希中的所有键值对。
hash = { a: 1, b: 2 }
hash.clear
puts hash # 输出 {}size 和 length
size 或 length 方法返回哈希中键值对的数量。
hash = { a: 1, b: 2 }
puts hash.size # 输出 2empty?
empty? 方法用于检查哈希是否为空。
hash = { a: 1, b: 2 }
puts hash.empty? # 输出 falseinvert
invert 方法用于交换哈希中的键和值。
hash = { a: 1, b: 2 }
puts hash.invert # 输出 { 1 => :a, 2 => :b }fetch
fetch 方法用于获取指定键的值。如果键不存在,可以指定默认值或块。
hash = { a: 1, b: 2 }
puts hash.fetch(:a) # 输出 1
puts hash.fetch(:c, 3) # 输出 3
puts hash.fetch(:d) { |k| "Key #{k} not found" } # 输出 "Key d not found"default 和 default=
default 方法用于获取哈希的默认值,default= 方法用于设置哈希的默认值。
hash = Hash.new("default")
puts hash[:a] # 输出 "default"
hash.default = "new default"
puts hash[:b] # 输出 "new default"to_a
to_a 方法用于将哈希转换为数组。
hash = { a: 1, b: 2 }
puts hash.to_a # 输出 [[:a, 1], [:b, 2]]