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

首頁(yè) > 編程 > Ruby > 正文

Ruby中Hash哈希結(jié)構(gòu)的基本操作方法

2020-02-24 15:37:19
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Hash是對(duì)應(yīng)于鍵值的數(shù)據(jù)結(jié)構(gòu),其實(shí)Ruby有直接支持它的,本文武林技術(shù)頻道小編總結(jié)了Ruby中Hash哈希結(jié)構(gòu)的基本操作方法,一起跟著武林技術(shù)頻道小編的步伐來(lái)了解一下吧!

關(guān)于哈希
先來(lái)了解一下Hash的基本思路:
設(shè)要存儲(chǔ)對(duì)象的個(gè)數(shù)為num, 那么我們就用len個(gè)內(nèi)存單元來(lái)存儲(chǔ)它們(len>=num); 以每個(gè)對(duì)象ki的關(guān)鍵字為自變量,用一個(gè)函數(shù)h(ki)來(lái)映射出ki的內(nèi)存地址,也就是ki的下標(biāo),將ki對(duì)象的元素內(nèi)容全部存入這個(gè)地址中就行了。這個(gè)就是Hash的基本思路。
為什么要用一個(gè)函數(shù)來(lái)映射出它們的地址單元呢?
假設(shè)現(xiàn)在我要存儲(chǔ)4個(gè)元素 13 7 14 11
顯然,我們可以用數(shù)組來(lái)存。也就是:a[1] = 13; a[2] = 7; a[3] = 14; a[4] = 11;
當(dāng)然,我們也可以用Hash來(lái)存。下面給出一個(gè)簡(jiǎn)單的Hash存儲(chǔ):
先來(lái)確定那個(gè)函數(shù)。我們就用h(ki) = ki%5;
對(duì)于第一個(gè)元素 h(13) = 13%5 = 3; 也就是說(shuō)13的下標(biāo)為3;即Hash[3] = 13;
對(duì)于第二個(gè)元素 h(7) = 7 % 5 = 2; 也就是說(shuō)7的下標(biāo)為2; 即Hash[2] = 7;
同理,Hash[4] = 14; Hash[1] = 11;
現(xiàn)在我要你查找11這個(gè)元素是否存在。你會(huì)怎么做呢?當(dāng)然,對(duì)于數(shù)組來(lái)說(shuō),那是相當(dāng)?shù)暮?jiǎn)單,一個(gè)for循環(huán)就可以了。
也就是說(shuō)我們要找4次。
下面我們來(lái)用Hash找一下。
首先,我們將要找的元素11代入剛才的函數(shù)中來(lái)映射出它所在的地址單元。也就是h(11) = 11%5 = 1了。下面我們來(lái)比較一下Hash[1]?=11, 這個(gè)問(wèn)題就很簡(jiǎn)單了。也就是說(shuō)我們就找了1次。這個(gè)就是Hash的妙處了,通過(guò)制定一個(gè)規(guī)則(函數(shù))來(lái)映射出它的地址,數(shù)據(jù)也就能通過(guò)這個(gè)規(guī)則去找到它的內(nèi)存地址了。

Ruby中的Hash結(jié)構(gòu)
1.創(chuàng)建哈希:就像創(chuàng)建數(shù)組一樣,我們可以通過(guò)Hash類(lèi)來(lái)創(chuàng)建一個(gè)Hash實(shí)例:

ruby.html="" tags="">ruby;">h1 = Hash.new                         #默認(rèn)值為nilh2 = Hash.new(“This is my first hash instance”) #默認(rèn)值為” This is my first hash instance”:

上面兩個(gè)例子都創(chuàng)建了一個(gè)空的Hash實(shí)例。一個(gè)Hash對(duì)象總是有一個(gè)默認(rèn)的值——因?yàn)槿绻谝粋€(gè)Hash對(duì)象里沒(méi)有找到指定的索引(key),將會(huì)返回默認(rèn)值。
創(chuàng)建了Hash對(duì)象后,我們就可以像數(shù)組那樣給他添加/刪除項(xiàng)了。唯一不同的是,在數(shù)組中的索引只是能整數(shù),而在Hash中索引(key)可以是任何類(lèi)型(any type of object)且唯一的數(shù)據(jù):

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

Note: 如果在給Hash賦值時(shí),使用的相同的key,那么后面的值會(huì)覆蓋掉前面的值。另外,Ruby還提供了一種方便的創(chuàng)建和初始化Hash的方法,只需要在key后面加一個(gè)=>符號(hào)并跟一個(gè)值即可。每個(gè)key-value對(duì)用逗號(hào)隔開(kāi)。然后整體用大括號(hào)括起來(lái):

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

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

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

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

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

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

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

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

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

4.Hash排序:
當(dāng)我們需要對(duì)Hash進(jìn)行排序時(shí),不能像數(shù)組那樣簡(jiǎn)單的使用sort方法,因?yàn)閿?shù)組中的數(shù)據(jù)類(lèi)型都是一樣的(整型),Hash中的數(shù)據(jù)類(lèi)型可能并不完全一樣,如整數(shù)類(lèi)型和字符串類(lèi)型就沒(méi)法一起排序,此時(shí)就需要我們進(jìn)行處理,如下(如果Hash中的數(shù)據(jù)類(lèi)型全部相同可以不進(jìn)行如下處理):
??????

 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))

結(jié)果:

{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"]]

?
事實(shí)上Hash的sort方法是把一個(gè)Hash對(duì)象轉(zhuǎn)換成以[key,value]為單個(gè)元素的一個(gè)數(shù)組,然后再用數(shù)組的sort方法進(jìn)行排序。
?
5.Hash類(lèi)常用方法:

?

方法

說(shuō)明

size()

返回Hash對(duì)象的長(zhǎng)度

length()

返回Hash對(duì)象的長(zhǎng)度

include?(key)

判斷指定的Hash對(duì)象是否包含指定的key

has_key?(key)

判斷指定的Hash對(duì)象是否包含指定的key

delete(key)

刪除Hash對(duì)象中指定key的對(duì)應(yīng)元素

keys()

返回由Hash對(duì)象中全部key組成的數(shù)組

values()

返回由Hash對(duì)象中全部value組成的數(shù)組


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

?
深度挖掘
1.把Hash當(dāng)作數(shù)組來(lái)處理:

Hash中的keys and values方法的返回值都是一個(gè)數(shù)組,所以我們可以使用數(shù)組的方法來(lái)對(duì)它們操作:

h1 = {1=>'one', 2=>'two', 3=> 'three',4=> 'four'}h2 = {1=>'one', 3=>'two', 4=> 'four',5=> 'five'} p( h1.keys & h2.keys )p( h1.values & h2.values )p( h1.keys+h2.keys )p( h1.values-h2.values )p( (h1.keys << h2.keys) )p( (h1.keys << h2.keys).flatten)

結(jié)果:

[1, 3, 4]["one", "two", "four"][1, 2, 3, 4, 5, 1, 3, 4]["three"][1, 2, 3, 4, [5, 1, 3, 4]][1, 2, 3, 4, 5, 1, 3, 4]

?
2.追加和連續(xù)的區(qū)別:
+:給一個(gè)數(shù)組添加元素,創(chuàng)建一個(gè)新的數(shù)組
<<:給一個(gè)數(shù)據(jù)添加元素,直接操作原數(shù)組,當(dāng)給一個(gè)數(shù)組添加的新元素也是一個(gè)數(shù)組時(shí),該新元素作為數(shù)組的最后一個(gè)元素:

  a=[1,2,3]  b=[4,5,6]   p(a+b)  p(a<<b)

結(jié)果:

[1, 2, 3, 4, 5, 6][1, 2, 3, [4, 5, 6]]     #[1, 2, 3, [4, 5, 6]].flatten =>[1, 2, 3, 4, 5, 6]

以上就是武林技術(shù)頻道小編介紹的關(guān)于Ruby中Hash哈希結(jié)構(gòu)的基本操作方法的全部?jī)?nèi)容啦!目前這個(gè)行業(yè)的發(fā)展前景也非常的不錯(cuò)的。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

久久婷婷国产91天堂综合精品| 亚洲欧美日韩久久久久久| 欧美成人hd| 亚欧洲乱码视频| 国内a∨免费播放| 成人一区二区在线观看| 三级黄色视屏| 五月天婷婷在线播放| 国产伦精品一区二区三区在线观看| 欧洲一级毛片| 久久久99999| 亚洲高清三级视频| 久久综合伊人77777| 在线视频一区二区三区在线播放| 久久精品视频导航| 成a人片国产精品| 中文字幕不卡三区| 婷婷四房综合激情五月| 欧美影院三区| 久久嫩草精品久久久久| 97超碰国产精品女人人人爽| 欧美激情性做爰免费视频| 精品无码一区二区三区电影桃花| 亚洲一区制服诱惑| 色婷婷综合中文久久一本| 国产一区二区三区自拍| 亚洲free嫩bbb| 无人日本免费视频| 成视人a免费观看视频| 成人av网站在线观看| 精品国产污污免费网站入口| 精品中文视频在线| 国产免费久久精品| www.天天操.com| 中文字幕乱码亚洲无线精品一区| 18aaaa精品欧美大片h| 久久国产在线视频| 日本黄网免费一区二区精品| 二区三区偷拍浴室洗澡视频| 亚洲女人的天堂| 日韩av在线资源| 午夜啪啪小视频| 影音先锋日韩av| 国产一区二区三区四| 精品久久久久久中文字幕一区奶水| 97在线观看免费高| av成人免费看| 91精品国产色综合久久不卡电影| 欧美久久综合性欧美| 日韩免费久久| 四虎884aa成人精品最新| 欧美videos巨大粗暴| 十大黄色软件免费看| 亚洲精品字幕| 成人性生交大片免费看视频直播| 欧美人伦禁忌dvd放荡欲情| 亚洲国产精品一| xxx.xxx欧美| 国产精品无码人妻一区二区在线| 69久久夜色精品国产69蝌蚪网| 天天操天天碰| 日韩欧美亚洲在线| 日本黄色网址大全| 日韩中文字幕三区| 欧美电影一二区| 日韩电影免费观看中文字幕| 日韩五码在线观看| 最近免费中文字幕视频2019| 一本色道久久88| 午夜dv内射一区二区| 私人影视中文字幕| 91色p视频在线| 亚洲人成电影网站| 久草成人在线| 男人插女人下面视频| 久久久久xxxx| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 欧美激情第一区| 久久久久久综合| 欧美日韩在线精品一区二区三区激情综合| 国产一区二区不卡老阿姨| 欧美精品成人| 91在线观看免费视频| 北条麻妃一区二区三区| 在线欧美成人| 国产欧美韩日| 日本福利一区| 国产三级电影在线观看| 亚洲影视一区二区| 亚洲综合小说区| 另类人妖一区二区av| 欧美精品影院| 亚洲色图美腿丝袜| 日本一区二区免费高清视频| 国产精品手机在线观看| 91小视频免费看| 亚洲二区在线观看| 国产精品传媒在线观看| 欧美日韩三级一区| 一本色道久久综合亚洲精品酒店| 国产一区不卡| 亚洲一区二区三区在线播放| 日韩码欧中文字| 日韩精品在线中文字幕| 日韩高清免费在线| 久久天天躁夜夜躁狠狠躁2022| 国产精品自拍第一页| 免费污视频在线观看| 无码少妇精品一区二区免费动态| 亚洲乱码中文字幕久久孕妇黑人| wwwxxxx国产| 欧美午夜精品久久久久久蜜| 欧美中文在线观看| 欧美综合二区| 亚洲综合成人在线| 亚洲一区自拍| 国产精品久久久久一区二区三区厕所| 日本国产一区二区| 外国一级黄色片| 国产日韩欧美电影| 亚洲精品精品一区| 欧美精品久久久久久久久久丰满| 黄色国产精品| 男人天堂手机在线观看| 性欧美超级视频| √天堂资源中文www| 日本成人中文字幕在线视频| 国产热re99久久6国产精品| 国产一区激情在线| 欧美激情不卡| 亚洲一区二区色| 无码精品一区二区三区在线| 国产又大又黑又粗免费视频| 中文字幕第2页| 99视频精品全部免费在线| 盗摄牛牛av影视一区二区| 国产野外作爱视频播放| 男生女生差差差的视频在线观看| 国产精品一区二区三区免费观看| 国产精品无码专区在线观看| 成人在线免费电影| 国外男同性恋在线看| 日韩黄色三级视频| 国产欧美一区二区三区在线观看视频| 欧美一性一交| 91伊人久久| 国产丝袜在线视频| 欧美日韩成人免费观看| 亚洲不卡av一区二区三区| 国产51自产区| 中文字幕成人| 蜜桃久久一区二区三区| 岛国精品在线播放| 成人免费xx| 精品亚洲va在线va天堂资源站| 亚洲精品wwwww| 免费av手机在线观看| 色老头一区二区| 亚洲成色www8888| 天海翼一区二区三区免费| a视频免费看| 久久av免费一区| 日本久久国产| 欧美高清视频一区二区三区在线观看| 永久免费看黄网站| 无码日韩精品一区二区免费| 爱情岛论坛亚洲自拍| 草莓视频18免费观看| 日本特黄特色aaa大片免费| 日韩欧美一区免费| 亚洲手机视频| 三级小说一区| 国产亚洲欧洲在线| 亚洲欧美日本韩国| 久久亚洲综合av| av高清一区| 国产精选一区二区| 国产高清一区二区三区视频| 国产精品20p| 亚洲人成网站免费播放| 欧美日韩综合网| 欧美日韩精品在线视频| 日韩国产福利| 天天爱天天做天天爽| 毛片av一区二区三区| 69久久99精品久久久久婷婷| 天堂av在线网| 免费av片在线观看一道本| 天堂精品高清1区2区3区| 欧美视频一二三区| 狠狠入ady亚洲精品| 337p粉嫩色噜噜噜大肥臀| 这里只有精品丝袜| 国产伦精品一区二区三区精品视频| 国产精品成av人在线视午夜片| 欧美丝袜丝交足nylons| 同性恋视频一区| av动漫精品一区二区| 国产乱理伦片在线观看夜一区| a级一a一级在线观看| 香蕉网站在线观看| 黄色网址免费在线观看| 亚洲中国最大av网站| 男人晚上看的视频| 91亚洲欧美| 在线视频一区二区三区| 久久精品视频免费在线观看| 污黄视频在线观看| 成人爽a毛片一区二区免费| 中文字幕免费精品一区| 高清av一区二区| 久久免费黄色| 最新av网址在线观看| √天堂资源地址在线官网| 午夜在线免费观看视频| 久久6免费高清热精品| 亚洲高清免费观看高清完整版| 欧美成人福利视频| 久久99精品久久久| 中文字幕中文字幕在线中心一区| 欧美综合在线播放| 无码人妻精品一区二区三区在线| 精品女同一区二区三区在线观看| aaaa黄色片| 成视频在线观看免费观看| 成人免费网站在线观看视频| 2222www色视频在线观看| 一本色道久久加勒比精品| 国产一卡不卡| 黄色网战入口| 欧美午夜片在线免费观看| 亚洲一区二区三区在线看| 精品人妻伦一二三区久久| 翁止熄痒禁伦短文合集免费视频| 超碰中文字幕在线| 99在线欧洲视频| 国产第一区电影| 国产成人视屏| 成年人视频网站免费观看| 大陆极品少妇内射aaaaaa| 欧美视频在线观看 亚洲欧| 成人三级视频| 国产一区二区三区久久久久久久久| 亚洲啊v在线| 精品一区二区三区香蕉蜜桃| caoporn97在线视频| 超级碰碰久久| 五月天av影院| 成人小电影网站| 久久综合狠狠综合久久激情| 精品免费一区二区| 黄瓜视频18免费观看| 免费vip影院| 久久久久久国产精品视频| 欧美 日韩 精品| 热99这里只有精品| 国产成人丝袜美腿| 欧美一级手机免费观看片| 视频一区视频二区视频| 久久国产精品影视| 一区二区三区四区在线观看国产日韩| 国产精品久久久久久久久久白浆| 污污的网站在线看| 99re在线视频免费观看| 亚洲午夜久久久| 制服丝袜av在线| 亚洲欧美成人精品| 中文字幕影音先锋| 亚洲精品成人电影| 日韩精品91亚洲二区在线观看| 国产精品无码久久久久| 蜜桃传媒在线观看免费进入| 欧美日韩精品一区二区三区视频播放| 一区二区三区日韩在线观看| 久久99精品久久久久久秒播放器| 一个人看的www日本高清视频| 欧美一级一区| 国产亚洲成人精品| 给我免费播放片在线观看| 国产一区二区日韩精品| 国产在线天堂www网在线观看| av资源一区| 国产曰肥老太婆无遮挡| 成年人福利网站| 99热久久这里只有精品| 色吧亚洲日本| 欧美 日韩精品| 亚洲丁香婷深爱综合| 欧美精品一区二区三区国产精品| 亚洲成人黄色网| 黄页网站视频在线观看| 亚洲国产中文在线| 欧美午夜精品伦理| 久久精品免视看国产成人| 日韩国产小视频| 美日韩精品免费观看视频| 日韩一区国产在线观看| 国产日韩一级二级三级| 欧美在线关看| 中文字幕55页| 黄色录像二级片| 99在线影院| 欧美午夜在线播放| 中文字幕一区图| 天天操天天色综合| 日本电影久久久| 精品国产视频一区二区三区| 亚欧美无遮挡hd高清在线视频| 希岛爱理一区二区三区| 欧美二三四区| 传媒av在线| xxx性欧美| 亚洲一区二区三区在线看| 91精品国产91久久久久久密臀| 成人视屏免费看| 日本韩国欧美中文字幕| 亚洲一区二区精品视频| 在线观看免费亚洲| 亚洲人一区二区| 涩涩涩999| 国产a精品视频| 精品一区二区三区免费视频| 91免费版看片| 99热精品在线观看| 美女被爆操网站| 2018国产精品视频| 比比资源-先锋影音资源站| 欧美亚洲一区二区在线观看|