Ruby 学习(七)哈希类型Hash

哈希类型 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 }

传递参数为 keyvalue

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 }

传递参数为 keyvalue

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"}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值