婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Ruby中Hash哈希結構的基本操作方法小結

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

熱門標簽:買了外呼系統不想用了怎么辦 邯鄲外呼調研線路 真人語音電銷機器人系統 開封百應電銷機器人聯系方式 北京語音電銷機器人價格 電話機器人電話卡封號怎么辦 樂昌電話機器人 武漢呼叫中心外呼系統線路商 浦東上海400開頭的電話申請

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

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

h1 = Hash.new                         #默認值為nil
h2 = 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           
       }
    End
h1 = {1=>'one', 2=>'two', 3=> 'three'}
h2 = {6=>'six', 5=>'five', 4=> 'four'}
h3 = {'one'=>'A', 'two'=>'B','three'=>'C'}
h4 = h1.merge(h2)           #合并hash
h5 = h1.merge(h3)
def sorted_hash(aHash)
  return aHash.sort{|a,b| a.to_s => b.to_s }
end
p(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

 
深度挖掘
1.把Hash當作數組來處理:
Hash中的keys and values方法的返回值都是一個數組,所以我們可以使用數組的方法來對它們操作:

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)

結果:

[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.追加和連續的區別:
+:給一個數組添加元素,創建一個新的數組
:給一個數據添加元素,直接操作原數組,當給一個數組添加的新元素也是一個數組時,該新元素作為數組的最后一個元素:

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

結果:

[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]

您可能感興趣的文章:
  • Ruby中的Hash哈希類型基本操作方法小結
  • Ruby中關于hash的基本使用方法
  • Ruby中Hash的11個問題解答
  • Ruby字符串、條件、循環、數組、Hash、類基本操作筆記
  • Ruby簡明教程之數組和Hash介紹

標簽:宜春 松原 自貢 六安 淄博 鄂州 石嘴山 河北

巨人網絡通訊聲明:本文標題《Ruby中Hash哈希結構的基本操作方法小結》,本文關鍵詞  Ruby,中,Hash,哈希,結構,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ruby中Hash哈希結構的基本操作方法小結》相關的同類信息!
  • 本頁收集關于Ruby中Hash哈希結構的基本操作方法小結的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91视频在线观看免费| 麻豆传媒一区二区三区| 国产亚洲欧洲997久久综合 | 精品久久国产97色综合| 欧美无砖专区一中文字| 91亚洲男人天堂| 91在线你懂得| 日本久久电影网| 91黄色免费版| 欧美高清视频一二三区| 欧美午夜精品一区二区蜜桃| 欧美性感一区二区三区| 在线免费观看一区| 欧美性色aⅴ视频一区日韩精品| 色综合中文字幕国产 | 欧美午夜精品一区二区三区| 欧美日韩精品欧美日韩精品一综合 | 国产精品美女久久久久久久久| 国产日韩欧美一区二区三区乱码| 26uuu精品一区二区在线观看| 26uuu色噜噜精品一区| 国产色产综合产在线视频| 国产精品家庭影院| 亚洲午夜久久久久中文字幕久| 婷婷开心久久网| 美女在线观看视频一区二区| 成人一区二区三区视频在线观看| 91视频免费播放| 欧美区一区二区三区| 日韩一级大片在线| 亚洲国产高清在线观看视频| 一区二区三区中文字幕精品精品| 无吗不卡中文字幕| 激情综合色播激情啊| 暴力调教一区二区三区| 欧美日韩国产精品自在自线| 久久精品欧美一区二区三区麻豆| 亚洲男人的天堂av| 国产在线精品国自产拍免费| 一本色道综合亚洲| 国产亚洲精品bt天堂精选| 亚洲人123区| 国产在线视视频有精品| 欧美视频三区在线播放| 国产午夜精品久久久久久免费视| 亚洲成av人影院| 成人成人成人在线视频| 在线播放中文字幕一区| 国产精品天美传媒沈樵| 亚洲视频一二区| 亚洲国产美女搞黄色| 国产综合色产在线精品| 午夜欧美视频在线观看| 狠狠色丁香婷婷综合| 色婷婷综合久久久久中文一区二区 | 国产69精品久久777的优势| 91成人在线精品| 欧美国产一区二区在线观看 | 精品美女一区二区三区| 亚洲男同性视频| 成人动漫一区二区在线| 久久精品免费在线观看| 看电视剧不卡顿的网站| 欧美老年两性高潮| 一区二区三区欧美| 99久久精品国产麻豆演员表| 久久精品视频免费观看| 奇米色777欧美一区二区| 欧美日韩成人在线一区| 亚洲一区二区三区四区中文字幕| 91免费国产在线| 日韩毛片一二三区| 日本精品一级二级| 亚洲一区二区视频在线| 91福利精品第一导航| 亚洲一区免费在线观看| 欧洲亚洲精品在线| 亚洲成a人在线观看| 欧美人与性动xxxx| 久久国产人妖系列| 欧美xxxx老人做受| 国产一区二区精品久久99| 国产午夜精品久久久久久久| 成人小视频免费观看| 国产精品免费视频网站| 成人av影院在线| 亚洲女性喷水在线观看一区| 91福利资源站| 亚洲国产综合在线| 日韩精品专区在线| 国产成人在线观看| 亚洲色图一区二区| 5566中文字幕一区二区电影| 麻豆传媒一区二区三区| 国产精品久久网站| 欧美日韩国产首页| 国产一区二区三区av电影| 国产精品午夜电影| 在线看不卡av| 精品一区二区免费| 国产精品福利影院| 91精品国产综合久久香蕉麻豆 | 欧美日韩亚洲另类| 久久国产综合精品| 综合网在线视频| 欧美亚州韩日在线看免费版国语版| 男男成人高潮片免费网站| 欧美极品xxx| 欧美日韩在线三区| 久久成人久久鬼色| 一区二区三区在线免费播放| 日韩欧美在线不卡| 99综合影院在线| 韩国一区二区三区| 亚洲午夜激情av| 欧美极品美女视频| 日韩欧美一级二级三级久久久| jizz一区二区| 精品一区二区三区免费| 亚洲一区二区三区美女| 中文字幕精品一区二区精品绿巨人| 欧美日韩国产三级| 97国产一区二区| 国产乱码字幕精品高清av| 亚洲一二三区不卡| 国产精品美女久久久久久久| 精品久久久影院| 欧美另类久久久品| 欧美天天综合网| 99riav久久精品riav| 国产真实乱对白精彩久久| 香蕉成人啪国产精品视频综合网 | 欧美在线|欧美| 成人激情午夜影院| 国产美女久久久久| 婷婷中文字幕一区三区| 亚洲六月丁香色婷婷综合久久 | 亚洲桃色在线一区| 亚洲国产精品精华液2区45| 欧美一区二区三区婷婷月色| 在线观看视频欧美| 99久久亚洲一区二区三区青草| 精品一区二区成人精品| 轻轻草成人在线| 亚洲国产sm捆绑调教视频 | 国产精品麻豆网站| 国产日产欧美精品一区二区三区| 2023国产一二三区日本精品2022| 欧美一区二区视频观看视频| 91精品国产色综合久久| 91精品国产手机| 欧美一区二区三区的| 91精品午夜视频| 91精品国模一区二区三区| 91精品久久久久久蜜臀| 日韩视频免费观看高清完整版在线观看| 欧美色区777第一页| 在线观看一区日韩| 欧美人妇做爰xxxⅹ性高电影| 欧美日本在线一区| 制服丝袜亚洲精品中文字幕| 欧美一区二区三区在线观看视频| 日韩欧美的一区| 亚洲国产高清不卡| ㊣最新国产の精品bt伙计久久| 亚洲女厕所小便bbb| 午夜视频在线观看一区二区| 免费看欧美女人艹b| 久久69国产一区二区蜜臀| 国产一区二区导航在线播放| 成人动漫av在线| 欧美视频在线观看一区| 欧美一级生活片| 国产日产欧美一区二区视频| 亚洲精品久久嫩草网站秘色| 午夜精彩视频在线观看不卡| 国产又黄又大久久| 成人av网站在线观看| 欧美性受xxxx| 久久综合久久综合亚洲| 亚洲视频在线一区观看| 青娱乐精品视频在线| 国产激情精品久久久第一区二区| 色噜噜狠狠色综合中国| 久久先锋影音av鲁色资源| 一色屋精品亚洲香蕉网站| 日韩精品成人一区二区在线| 国产aⅴ综合色| 欧美日韩精品系列| 国产精品视频一二三| 蜜臀久久99精品久久久久久9| 成人午夜视频在线观看| 7777精品伊人久久久大香线蕉完整版| 2022国产精品视频| 亚洲一区二区三区视频在线播放| 国产精品18久久久久久vr| 欧美欧美午夜aⅴ在线观看| 国产日本欧美一区二区| 麻豆久久一区二区| 在线视频综合导航|