文章目录
哈希类型 Hash
- 在大括号内放置一系列键/值对
- 键和值之间使用逗号和序列
=>
分隔 - 尾部的逗号会被忽略
例子
colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
创建
months = Hash.new
months = {"1" => "January", "2" => "February"}
puts months
大小
hash.length
months = {"1" => "January", "2" => "February"}
puts months.length
2
hash.size
空判断 hash.empty?
months = {"1" => "January", "2" => "February"}
puts months.empty?
false
添加新的健值对
hash.store(key, value)
months = {"1" => "January", "2" => "February"}
months.store("3", "March")
puts months
{"1"=>"January", "2"=>"February", "3"=>"March"}
hash[key]=value
months = {"1" => "January", "2" => "February"}
months.store("3", "March")
months["4"] = "April"
puts months
{"1"=>"January", "2"=>"February", "3"=>"March", "4"=>"April"}
获取key对应的value
hash[key]
- 有则返回对于的值
- 没有的话就返回nil
months = {"1" => "January", "2" => "February"}
puts months["1"] # January
puts months["3"] # 空nil
hash.default(key = nil)
修改健值对 hash[key]=value
months = {"1" => "January", "2" => "February"}
months["1"] = "new"
months["3"] = "March"
puts months
{"1"=>"new", "2"=>"February", "3"=>"March"}
删除
清空所有的健值对 hash.clear
months = {"1" => "January", "2" => "February"}
months.clear
puts months
{}
删除key对应的健值对 hash.delete(key)
months = {"1" => "January", "2" => "February"}
months.delete("1")
puts months
{"2"=>"February"}
hash.delete_if { |key,value| block }
使用 block
进行匹配
- 返回 true 则会删除该健值对
months = {"1" => "January", "2" => "February"}
months.delete_if do |key, value|
key == "1"
end
puts months
{"2"=>"February"}
默认值
设置默认值 hash.default = obj
months = {"1" => "January", "2" => "February"}
months.default = "default_value"
获取默认值 hash.default(key = nil)
months = {"1" => "January", "2" => "February"}
months.default = "default_value"
puts months.default("1")
default_value
遍历
hash.each { |key,value| block }
传递参数为 key
和 value
months = {"1" => "January", "2" => "February"}
months.each do |key, value|
puts "key: #{key}, value: #{value}"
end
key: 1, value: January
key: 2, value: February
hash.each_key { |key| block }
传递参数为 key
和 value
months = {"1" => "January", "2" => "February"}
months.each_key do |key|
puts "key: #{key}"
end
key: 1
key: 2
hash.each_value { |value| block }
传递参数为 value
months = {"1" => "January", "2" => "February"}
months.each_value do |value|
puts "value: #{value}"
end
value: January
value: February
选择 hash.select { |key, value| block }
months = {"1" => "January", "2" => "February"}
res = months.select { |key, value|
key == "1"
}
puts res
{"1"=>"January"}
包含判断
判断是否包含key
hash.has_key?(key)
hash.include?(key)
hash.key?(key)
hash.member?(key)
months = {"1" => "January", "2" => "February"}
puts months.key?("2") # true
puts months.has_key?("1") # true
puts months.include?("3") # false
puts months.member?("4") # false
判断是否包含value
方法
hash.has_value?(value)
hash.value?(value)
例子
months = {"1" => "January", "2" => "February"}
puts months.has_value?("January") # true
puts months.has_value?("March") # false
反转key和value hash.invert
键
将变成值
值
将变成键
months = {"1" => "January", "2" => "February"}
puts months.invert
{"January"=>"1", "February"=>"2"}
获取
所有的key hash.keys
months = {"1" => "January", "2" => "February"}
puts months.keys
1
2
所有的 value hash.values
months = {"1" => "January", "2" => "February"}
puts months.values
January
February
拼接
hash.merge(other_hash)
- 把
other_hash
拼接到hash
中 - 对相同的key会进行重写value
months = {"1" => "January", "2" => "February"}
months2 = {"3" => "March", "2" => "new February"}
puts months.merge(months2)
{"1"=>"January", "2"=>"new February", "3"=>"March"}
hash.update(other_hash)
和 hash.merge(other_hash)
一样的含义
内容替换 hash.replace(other_hash)
months = {"1" => "January", "2" => "February"}
months2 = {"3" => "March", "2" => "new February"}
puts months.replace(months2)
{"3"=>"March", "2"=>"new February"}