<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Ruby 哈希 > 原文: [https://zetcode.com/lang/rubytutorial/hashes/](https://zetcode.com/lang/rubytutorial/hashes/) 在 Ruby 教程的這一部分中,我們將使用 Ruby 哈希。 ## Ruby 哈希定義 Ruby 哈希是鍵-值對的集合。 它類似于數組。 與數組不同,哈希可以將任意對象作為索引。 數組只能具有整數。 哈希值按插入相應鍵的順序枚舉其值。 哈希有時稱為關聯數組。 哈希是功能強大的集合。 他們有許多方法可供程序員用來完成工作。 ## Ruby 哈希創建 可以通過兩種基本方式創建哈希:使用`new`關鍵字或哈希字面值。 ```ruby #!/usr/bin/ruby names = Hash.new names[1] = "Jane" names[2] = "Thomas" puts names ``` 第一個腳本創建一個哈希并將兩個鍵值對添加到哈希對象中。 ```ruby names = Hash.new ``` 創建一個哈希對象。 ```ruby names[1] = "Jane" names[2] = "Thomas" ``` 我們將兩對值添加到哈希中。 數字 1、2 是哈希的鍵。 鍵放在方括號內。 名稱是屬于鍵的值。 ```ruby puts names ``` `puts`方法將哈希的字符串表示形式打印到控制臺。 它也是哈希的字符串字面值。 ```ruby $ ./create.rb {1=>"Jane", 2=>"Thomas"} ``` 從輸出中,我們可以看到名稱哈希的字面表示。 哈希以大括號為界。 鍵和值與`=>`字符配對。 `store`方法可用于使用某些值初始化哈希。 可以使用它代替方括號。 ```ruby #!/usr/bin/ruby names = Hash.new names.store(1, "Jane") names.store(2, "Thomas") names.store(3, "Rebecca") puts names ``` 我們有一個類似的腳本。 這次我們使用`store`方法。 該方法將給定鍵與給定值相關聯,并將該對存儲在哈希中。 ```ruby names.store(1, "Jane") ``` `store`方法的第一個參數是鍵,第二個參數是值。 在第三個腳本中,我們使用哈希字面值表示法創建哈希。 值用大括號括起來。 鍵值對與`=>`字符相關聯。 ```ruby #!/usr/bin/ruby domains = { "de" => "Germany", "sk" => "Slovakia", "hu" => "Hungary", "us" => "United States", "no" => "Norway" } puts domains["de"] puts domains["sk"] ``` 我們創建具有 5 對的域哈希。 這次鍵和值都是字符串類型。 ```ruby domains = { "de" => "Germany", "sk" => "Slovakia", "hu" => "Hungary", "us" => "United States", "no" => "Norway" } ``` 這是哈希字面值表示法。 鍵值對放在大括號之間。 這些項目用逗號分隔。 使用`=>`字符組合將鍵與值關聯。 ```ruby puts domains["de"] ``` 在這里,我們打印與`"de"`鍵關聯的域名名稱。 ```ruby $ ./create3.rb Germany Slovakia ``` 這是代碼示例的輸出。 ## Ruby 哈希基本操作 在本節中,我們介紹了一些用于 Ruby 哈希基礎知識的方法。 ```ruby #!/usr/bin/ruby names = Hash.new names[1] = "Jane" names[2] = "Thomas" names[3] = "Robert" names[4] = "Julia" names[5] = "Rebecca" puts "The size of the hash is #{names.size}" puts names.keys.inspect puts names.values.inspect ``` 在上面的 Ruby 腳本中,我們創建具有五個值的哈希。 我們介紹了三種哈希方法。 ```ruby puts "The size of the hash is #{names.size}" ``` `size`方法返回哈希的大小。 它是`length`方法的同義詞。 ```ruby puts names.keys.inspect puts names.values.inspect ``` `keys`方法返回哈希的所有鍵。 `values`方法以類似的方式返回哈希的所有值。 返回的數據為數組形式。 為了獲得更可讀的輸出,我們還對返回的數組調用`inspect`方法。 ```ruby $ ./basic.rb The size of the hash is 5 [1, 2, 3, 4, 5] ["Jane", "Thomas", "Robert", "Julia", "Rebecca"] ``` 我們看到示例的輸出。 請注意,最后兩個方法的輸出是兩個數組。 本節的第二個示例介紹了三種不同的哈希方法。 ```ruby #!/usr/bin/ruby names1 = Hash.new names1[1] = "Jane" names1[2] = "Thomas" names1[3] = "Robert" names1[4] = "Julia" names1[5] = "Rebecca" names2 = names1.dup puts names1.eql? names2 puts names1.empty? names1.clear puts names1.empty? ``` Ruby 腳本創建一個名稱哈希。 它在對象上調用三種哈希方法。 ```ruby names2 = names1.dup ``` 我們通過調用`dup`方法來創建哈希的副本。 該方法由父對象的哈希繼承。 ```ruby puts names1.eql? names2 ``` `eql?`方法比較兩個哈希對象。 在我們的例子中,哈希值是相等的,并且該行打印正確。 ```ruby puts names1.empty? ``` `empty?`方法檢查哈希是否為空。 該行打印`false`,因為`names1`哈希包含五個項目。 ```ruby names1.clear puts names1.empty? ``` `clear`方法從哈希中刪除所有項目。 連續調用`empty?`方法將返回`true`。 ```ruby $ ./basic2.rb true false true ``` 這是示例輸出。 我們有一些方法可以確定哈希中是否存在鍵或值。 ```ruby #!/usr/bin/ruby domains = { :de => "Germany", :sk => "Slovakia", :no => "Norway", :us => "United States" } puts domains.has_key? :de puts domains.include? :no puts domains.key? :me puts domains.member? :sk puts domains.has_value? "Slovakia" puts domains.value? "Germany" ``` 我們用四個對創建一個域哈希。 鍵是符號。 通常將符號用作鍵,因為它們更有效。 ```ruby puts domains.has_key? :de puts domains.include? :no puts domains.key? :me puts domains.member? :sk ``` 在這里,我們有四種確定鍵是否在哈希中的方法。 他們都做同樣的事。 它們是同義詞。 ```ruby puts domains.has_value? "Slovakia" puts domains.value? "Germany" ``` 這兩種方法檢查兩個字符串是否在哈希中。 ```ruby $ ./has.rb true true false true true true ``` 這是示例的輸出。 在本節的最后一個示例中,我們將從哈希中讀取值。 ```ruby #!/usr/bin/ruby stones = { 1 => "garnet", 2 => "topaz", 3 => "opal", 4 => "amethyst" } puts stones.fetch 1 puts stones[2] puts stones.values_at 1, 2, 3 ``` Ruby 腳本提供了三種用于讀取哈希值的哈希方法。 ```ruby puts stones.fetch 1 ``` `fetch`方法讀取給定鍵的值。 ```ruby puts stones[2] ``` 方括號可用于獲取值。 在我們的例子中,該行將`"topaz"`打印到控制臺。 ```ruby puts stones.values_at 1, 2, 3 ``` `values_at`方法可用于一步獲得多個值。 該方法返回給定鍵的值的數組。 ```ruby $ ./read.rb garnet topaz garnet topaz opal ``` This is the output of the example. ## Ruby 哈希迭代 有幾種方法可用于遍歷 Ruby 哈希。 ```ruby #!/usr/bin/ruby stones = { 1 => "garnet", 2 => "topaz", 3 => "opal", 4 => "amethyst" } stones.each { |k, v| puts "Key: #{k}, Value: #{v}" } stones.each_key { |key| puts "#{key}" } stones.each_value { |val| puts "#{val}" } stones.each_pair { |k, v| puts "Key: #{k}, Value: #{v}" } ``` 在上面的示例中,我們介紹了四種方法。 我們使用它們顯示哈希的所有鍵,值以及鍵和值。 ```ruby stones.each { |k, v| puts "Key: #{k}, Value: #{v}" } ``` `each`方法為哈希中的每個鍵調用給定的塊,并將鍵值對作為參數傳遞。 ```ruby stones.each_key { |key| puts "#{key}" } ``` 我們使用`each_key`方法循環遍歷哈希的所有鍵。 它們被打印到控制臺。 ```ruby stones.each_value { |val| puts "#{val}" } ``` `each_value`可用于循環遍歷哈希值。 ```ruby stones.each_pair { |k, v| puts "Key: #{k}, Value: #{v}" } ``` `each_pair`方法是`each`方法的同義詞。 我們遍歷石頭哈希的鍵和值。 ```ruby $ ./loop.rb Key: 1, Value: garnet Key: 2, Value: topaz Key: 3, Value: opal Key: 4, Value: amethyst 1 2 3 4 garnet topaz opal amethyst Key: 1, Value: garnet Key: 2, Value: topaz Key: 3, Value: opal Key: 4, Value: amethyst ``` 輸出顯示石頭哈希的鍵和值,鍵,值。 ## Ruby 刪除哈希中的對 在以下示例中,我們將關注從哈希中刪除對的方法。 這包括刪除單個對的方法以及可以一步刪除多個鍵值的方法。 ```ruby #!/usr/bin/ruby names = Hash.new names[1] = "Jane" names[2] = "Thomas" names[3] = "Robert" names[4] = "Julia" names[5] = "Rebecca" names.delete 4 names.shift puts names ``` 在腳本中,我們有兩種方法:`delete`和`shift`。 `delete`方法刪除并返回指定鍵的值。 `shift`方法從哈希中刪除第一對。 它還以數組形式返回刪除的對。 ```ruby names.delete 4 ``` 在這里,我們刪除一對`4 => "Julia"`。 ```ruby names.shift ``` 該代碼行刪除了第一對,即`1 => "Jane"`。 ```ruby $ ./deleteitem.rb {2=>"Thomas", 3=>"Robert", 5=>"Rebecca"} ``` 在輸出中,我們可以看到剩下的哈希對。 `reject`和`delete_if`方法可以從哈希中刪除多對。 這些方法刪除對塊中給定條件返回`true`的對。 兩種方法之間有重要區別。 `reject`方法適用于哈希的副本,而`delete_if`方法適用于原始哈希。 ```ruby #!/usr/local/bin/ruby names1 = Hash.new names1[1] = "Jane" names1[2] = "Thomas" names1[3] = "Robert" names1[4] = "Julia" names1[5] = "Rebecca" puts names1.reject { |k, v| v =~ /R.*/ } puts names1 puts names1.delete_if { |k, v| k<=3 } puts names1 ``` 該示例使用前面提到的方法刪除多個對。 ```ruby puts names1.reject { |k, v| v =~ /R.*/ } ``` `reject`方法刪除適合塊中正則表達式的所有值。 返回修改后的哈希,并且原始哈希不會更改。 ```ruby puts names1 ``` 該行的輸出確認原始哈希是完整的。 ```ruby puts names1.delete_if { |k, v| k<=3 } ``` 在這種情況下,我們將刪除所有鍵小于或等于 3 的對。該方法將修改原始哈希。 ```ruby $ ./massdelete.rb {1=>"Jane", 2=>"Thomas", 4=>"Julia"} {1=>"Jane", 2=>"Thomas", 3=>"Robert", 4=>"Julia", 5=>"Rebecca"} {4=>"Julia", 5=>"Rebecca"} {4=>"Julia", 5=>"Rebecca"} ``` 示例的輸出。 ## Ruby 在哈希中添加元素 Ruby 的`merge`和`update`方法將(鍵,值)對添加到哈希。 Ruby 具有用于添加哈希的方法。 ```ruby #!/usr/bin/ruby names1 = Hash.new names1[1] = "Jane" names1[2] = "Thomas" names2 = Hash.new names2[3] = "Robert" names2[4] = "Julia" names = names1.merge names2 puts names names = names1.update names2 puts names ``` 在 Ruby 腳本中,我們創建兩個哈希。 然后我們在它們上應用`merge`和`update`方法。 ```ruby names = names1.merge names2 puts names ``` `names1`和`names2`哈希組合在一起。 結果分配給名稱哈希。 我們打印新創建的哈希。 ```ruby $ ./merge.rb {1=>"Jane", 2=>"Thomas", 3=>"Robert", 4=>"Julia"} {1=>"Jane", 2=>"Thomas", 3=>"Robert", 4=>"Julia"} ``` 如我們所見,最終的哈希包含`names1`和`names2`哈希對。 ## Ruby 哈希`merge`和`merge!`方法 在最后一節中,我們回顧了一個常見的 Ruby 習慣用法。 幾種 Ruby 方法的對應方法都以感嘆號結尾。 此標記沒有語法意義,表示方法修改了調用該方法的對象。 ```ruby #!/usr/bin/ruby names1 = Hash.new names1[1] = "Jane" names1[2] = "Thomas" names2 = Hash.new names2[3] = "Robert" names2[4] = "Julia" names = names1.merge names2 puts names puts names1 names = names1.merge! names2 puts names puts names1 ``` 我們將演示`merge`和`merge!`方法的區別。 ```ruby names = names1.merge names2 ``` `merge`不會修改`names1`哈希。 它可以在其副本上工作。 ```ruby names = names1.merge! names2 ``` `merge!`方法適用于原始哈希。 `names1`哈希已更改。 ```ruby $ ./merge2.rb {1=>"Jane", 2=>"Thomas", 3=>"Robert", 4=>"Julia"} {1=>"Jane", 2=>"Thomas"} {1=>"Jane", 2=>"Thomas", 3=>"Robert", 4=>"Julia"} {1=>"Jane", 2=>"Thomas", 3=>"Robert", 4=>"Julia"} ``` 這是`merge2.rb`程序的輸出。 在本章中,我們使用了 Ruby 哈希。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看