世界的瞭望哨

“认识自己 认识世界”

Ruby学习系列 - 基础知识 - Hash

序言

这部分讲Hash,取材于Ruby core API,加以归纳整理,便于记忆

赋值

1
2
3
4
h = { "a" => 100, "b" => 200 }
h["a"] = 9
h["c"] = 4
h   #=> {"a"=>9, "b"=>200, "c"=>4}

取值

1
2
3
h = { "a" => 100, "b" => 200 }
h["a"]   #=> 100
h["c"]   #=> nil
1
2
3
4
h = { "a" => 100, "b" => 200, "c" => 300, "d" => 300 }
h.key(200)   #=> "b"
h.key(300)   #=> "c"
h.key(999)   #=> nil

运算

1
2
3
4
5
6
h1 = { "a" => 100, "b" => 200 }
h2 = { "b" => 254, "c" => 300 }
h1.merge(h2)   #=> {"a"=>100, "b"=>254, "c"=>300}
h1.merge(h2){|key, old_val, new_val| new_val - old_val}
               #=> {"a"=>100, "b"=>54,  "c"=>300}
h1             #=> {"a"=>100, "b"=>200}

增减

1
2
3
h = { "a" => 100, "b" => 200 }
h.delete("a")                              #=> 100
h.delete("z")                              #=> nil
1
2
h = { "a" => 100, "b" => 200, "c" => 300 }
h.delete_if {|key, value| key >= "b" }   #=> {"a"=>100}

reject! is equivalent to Hash#delete_if, but returns nil if no changes were made.

统计与查询

1
{}.empty?   #=> true
1
2
3
h = { "a" => 100, "b" => 200 }
h.has_key?("a")   #=> true
h.has_key?("z")   #=> false
1
2
3
h = { "a" => 100, "b" => 200 }
h.has_value?(100)   #=> true
h.has_value?(999)   #=> false
1
2
h = { "a" => 100, "b" => 200, "c" => 300, "d" => 400 }
h.keys   #=> ["a", "b", "c", "d"]
1
2
h = { "a" => 100, "b" => 200, "c" => 300 }
h.values   #=> [100, 200, 300]
1
2
3
4
h = { "d" => 100, "a" => 200, "v" => 300, "e" => 400 }
h.length        #=> 4
h.delete("a")   #=> 200
h.length        #=> 3
1
2
3
h = { "a" => 100, "b" => 200, "c" => 300 }
h.select {|k,v| k > "a"}  #=> {"b" => 200, "c" => 300}
h.select {|k,v| v < 200}  #=> {"a" => 100}

其它

1
2
h = { "a" => 100, "b" => 200 }
h.each {|key, value| puts "#{key} is #{value}" }
1
2
h = { "a" => 100, "b" => 200 }
h.each_key {|key| puts key }
1
2
h = { "a" => 100, "b" => 200 }
h.each_value {|value| puts value }

小结

以上为不完全统计,后续调整

Comments