亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby中的Hash哈希類型基本操作方法小結

2020-10-29 19:34:42
字體:
來源:轉載
供稿:網友

1.創建哈希:就像創建數組一樣,我們可以通過Hash類來創建一個Hash實例:

h1 = Hash.new             #默認值為nilh2 = Hash.new(“This is my first hash instance”) #默認值為” This is my first hash instance”:

上面兩個例子都創建了一個空的Hash實例。一個Hash對象總是有一個默認的值――因為如果在一個Hash對象里沒有找到指定的索引(key),將會返回默認值。
創建了Hash對象后,我們就可以像數組那樣給他添加/刪除項了。唯一不同的是,在數組中的索引只是能整數,而在Hash中索引(key)可以是任何類型(any type of object)且唯一的數據:

h2["one"] = "北京"h2["two"] = "上海"h2["three"] = "深圳"h2["four"] = "廣州"

Note: 如果在給Hash賦值時,使用的相同的key,那么后面的值會覆蓋掉前面的值。另外,Ruby還提供了一種方便的創建和初始化Hash的方法,只需要在key后面加一個=>符號并跟一個值即可。每個key-value對用逗號隔開。然后整體用大括號括起來:

h2 = {"one" => "北京","two" =>"上海","three" =>"深圳","four" =>"廣州" }

 
2.通過索引存取Hash的值:
要想獲取某個值,可以用下面的方法:

  puts h2[“one”]    #=>”北京”

如果指定的key不存在,將返回默認的值(前面有提到過)。此外,我們還可以用default方法獲取默認值,用default+=方法設置默認值

    puts h1.default    h1.default += “This is set value method”

 
3.復制Hash:
和數組一樣,我們可以把一個Hash變量分配給另一個hash變量,它們都引用想同的Hash,所以如果其中一個的值變了,那么另外一個的值也會跟著變:

  h3 = h2  h3[“one”] = “西安”  puts h h2[“one”]    #=>”西安”

有的時候我們不希望上面的情況發生,即:修改了其中一個的值另一個也跟著修改了,我們可以使用clone方法make a new copy

  h4 = h2.clone  h4[“one”] = “大連”  puts h2[“one”]       #=>”西安”(i.e. 值沒有修改)

 
4.Hash排序:
當我們需要對Hash進行排序時,不能像數組那樣簡單的使用sort方法,因為數組中的數據類型都是一樣的(整型),Hash中的數據類型可能并不完全一樣,如整數類型和字符串類型就沒法一起排序,此時就需要我們進行處理,如下(如果Hash中的數據類型全部相同可以不進行如下處理):

  def sorted_hash(aHash)    return aHash.sort{      |a,b| a.to_s <=> b.to_s          }  Endh1 = {1=>'one', 2=>'two', 3=> 'three'}h2 = {6=>'six', 5=>'five', 4=> 'four'}h3 = {'one'=>'A', 'two'=>'B','three'=>'C'}h4 = h1.merge(h2)      #合并hashh5 = h1.merge(h3)def sorted_hash(aHash) return aHash.sort{|a,b| a.to_s <=> b.to_s }endp(h4)     p(h4.sort)p(h5)p(sorted_hash(h5))

結果

{5=>"five", 6=>"six", 1=>"one", 2=>"two", 3=>"three", 4=>"four"}[[1, "one"], [2, "two"], [3, "three"], [4, "four"], [5, "five"], [6, "six"]]{"two"=>"B", "three"=>"C", 1=>"one", 2=>"two", "one"=>"A", 3=>"three"}[[1, "one"], [2, "two"], [3, "three"], ["one", "A"], ["three", "C"], ["two", "B"]]

 
事實上Hash的sort方法是把一個Hash對象轉換成以[key,value]為單個元素的一個數組,然后再用數組的sort方法進行排序。

5.Hash類常用方法:

方法

說明

size()

返回Hash對象的長度

length()

返回Hash對象的長度

include?(key)

判斷指定的Hash對象是否包含指定的key

has_key?(key)

判斷指定的Hash對象是否包含指定的key

delete(key)

刪除Hash對象中指定key的對應元素

keys()

返回由Hash對象中全部key組成的數組

values()

返回由Hash對象中全部value組成的數組


e.g.

  student = {     "name" => "Steve",     "age" => 22,     "Gender" => "male"    }    p student.keys              #=> ["name", "Gender", "age"]  p student.values             #=> ["Steve", "male", 22]  puts student.include?("age")         #=> true  puts student.size             #=> 3  student.delete("Gender")  puts student.has_key?("Gender")       #=>false  puts student.size             #=>2

6.Hash的轉換使用
在處理嵌套了幾層的hash時,總是感覺很混亂,讀取、修改時都很麻煩。因此想到把hash轉換為對象,直接生成key的get/set方法,代碼如下:

class HashObj class << self def load_from_hash(hash)  if hash.instance_of? Hash  obj = HashObj.new  hash.each{|k,v| obj.send :def_sget_method,k,HashObj.load_from_hash(v)}  obj  elsif hash.instance_of? Array  hash.map{|m| HashObj.load_from_hash(m) }  else  hash  end end end def attributes hash = {} @@reg ||= /=/ self.singleton_methods.reject{|x| @@reg =~ x.to_s}.each do |m|  v = self.send(m)  if v.instance_of? HashObj  real_v = v.attributes  elsif v.instance_of? Array  real_v = []  v.each do |l|   if l.instance_of? HashObj   real_v << l.attributes   else   real_v << l   end  end  else  real_v = v  end  hash[m] = real_v end hash end protected def def_sget_method(name,val) self.instance_variable_set "@#{name}",val self.define_singleton_method "#{name}=" do |n_val|  instance_variable_set "@#{name}",n_val end self.define_singleton_method name do  instance_variable_get "@#{name}" end endend

使用demo

hash = {name:'jack',age:22,phone:['61900871','8787876'],    basic_info:{country:'USA',city:'New York'}}obj = HashObj.load_from_hash hashobj.name #'jack'obj.age  #22obj.phone #['61900871','8787876']obj.basic_info #<HashObj:0x007f9eda02b360 @country="USA", @city="New York">obj.basic_info.country #'USA'obj.attributes == hash #trueobj.age = 30obj.attributes #{:name=>"jack", :age=>30, :phone=>["61900871", "8787876"],# :basic_info=>{:country=>"USA", :city=>"New York"}}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品777| 亚洲97在线观看| 亚洲男人天堂久| 影音先锋欧美在线资源| 北条麻妃99精品青青久久| 日韩精品亚洲精品| 97超级碰在线看视频免费在线看| 欧美激情第一页xxx| 欧洲永久精品大片ww免费漫画| 国产美女久久精品香蕉69| 在线亚洲国产精品网| 夜夜嗨av色综合久久久综合网| 91亚洲精品在线观看| 久久精品国产免费观看| 夜色77av精品影院| 国产69精品99久久久久久宅男| 亚洲国产另类 国产精品国产免费| 18久久久久久| 欧美视频13p| 国内精久久久久久久久久人| 日韩欧美精品网址| 亚洲精品成人av| 中文字幕精品久久| 国产日产欧美精品| 日韩最新免费不卡| 欧美性xxxx极品hd满灌| 久久全国免费视频| 欧美日韩免费观看中文| 国产日韩欧美影视| 69久久夜色精品国产7777| 成人妇女免费播放久久久| 国产小视频国产精品| 欧美成人激情在线| 91大神福利视频在线| 韩国19禁主播vip福利视频| 青青精品视频播放| 亚洲视频一区二区三区| 日韩亚洲一区二区| 91麻豆桃色免费看| 91精品免费看| 九九热精品在线| 国产一区视频在线| 精品国产福利视频| 国产精品91视频| 欧美黑人一级爽快片淫片高清| 亚洲精品视频网上网址在线观看| 91日韩在线视频| 日韩精品视频在线播放| 亚洲成人久久久久| 在线观看国产精品日韩av| 欧美精品亚州精品| 欧美激情影音先锋| 91精品国产综合久久香蕉922| 欧美午夜视频一区二区| 国产精品自产拍在线观看中文| 亚洲成人精品在线| 中文字幕精品视频| 91免费在线视频| 亚洲乱码av中文一区二区| 成人乱色短篇合集| 国产精品久久久久久久久久免费| 亚洲精品电影久久久| 国产精品成av人在线视午夜片| 国产精品一区二区三区久久久| 亚洲天堂日韩电影| 亚洲国产成人在线播放| 欧美第一黄色网| 国产欧美久久久久久| 国产亚洲欧洲黄色| 九九视频这里只有精品| 亚洲色图激情小说| 亚洲色图13p| 国产欧美一区二区三区四区| 91沈先生在线观看| 日本免费久久高清视频| 日韩精品中文字幕视频在线| 正在播放亚洲1区| 亚洲男人av电影| 欧美另类第一页| 日日狠狠久久偷偷四色综合免费| 亚洲va久久久噜噜噜久久天堂| 日韩中文娱乐网| 日韩av一区在线观看| 欧美电影在线观看| 久久久久久久久电影| 亚洲www视频| 亚洲影院高清在线| 国产一区二区日韩| 久久精品电影网站| 精品久久久久久久久中文字幕| 久久91亚洲精品中文字幕奶水| 国产偷亚洲偷欧美偷精品| 精品毛片网大全| 亚洲成人免费在线视频| 91国产在线精品| 久久国内精品一国内精品| 亚洲天堂久久av| 成人精品久久一区二区三区| 高清一区二区三区日本久| 在线播放精品一区二区三区| 日韩资源在线观看| 最近2019中文字幕一页二页| 国产精品aaa| 国产美女主播一区| 97超级碰在线看视频免费在线看| 欧美一级淫片videoshd| 国产一区二区三区直播精品电影| 欧美久久精品一级黑人c片| 青青青国产精品一区二区| 亚洲第一网站免费视频| 国产婷婷成人久久av免费高清| 中文字幕精品视频| 亚洲女人被黑人巨大进入al| xxxxx91麻豆| 色yeye香蕉凹凸一区二区av| 97在线视频精品| 久久久国产一区二区三区| 欧美午夜激情在线| 欧美视频二区36p| 91精品视频观看| 日韩av电影中文字幕| 亚洲男人天堂手机在线| 日韩精品日韩在线观看| 日韩欧美国产成人| 久久精品青青大伊人av| 久久久久久久久国产精品| 伊人久久久久久久久久久久久| 91高清在线免费观看| 91在线色戒在线| 久久成人这里只有精品| 久久久成人精品| 亚洲成色www8888| 欧美日在线观看| 精品无人区乱码1区2区3区在线| 精品久久久久久亚洲国产300| 欧美黑人巨大xxx极品| 永久免费毛片在线播放不卡| 成人h片在线播放免费网站| 国产精品扒开腿做爽爽爽的视频| 午夜精品久久久久久久久久久久久| 97热在线精品视频在线观看| 色小说视频一区| 亚洲精品免费一区二区三区| 久久天堂电影网| 成人av在线网址| 538国产精品一区二区免费视频| 亚洲福利视频在线| 国产精品偷伦免费视频观看的| 亚洲欧美日韩天堂一区二区| 日韩精品视频观看| 国产一区二区三区在线视频| 精品偷拍各种wc美女嘘嘘| 日本午夜精品理论片a级appf发布| 久久亚洲精品毛片| 欧美激情奇米色| 亚洲福利影片在线| 国产成人精品一区二区在线| 色综合91久久精品中文字幕| 亚洲精品久久久一区二区三区| 国产精品99久久久久久久久| 亚洲人成五月天| 久久精品一偷一偷国产| 在线精品国产欧美| 欧美电影在线观看网站|