簡體   English   中英

哈希,數組和ruby'.first'方法

[英]Hashes, arrays, and the ruby '.first' method

我正在使用Rails API,該API接收POST的json輸入並相應地處理事情。 當前元素涉及獎品和獎品代碼,我對哈希,數組和ruby .first方法有疑問。

免責聲明:我正在從舊版PHP應用程序接收json,到目前為止,我還無法編輯該應用程序的輸出。 我得到了它,並盡我所能處理它。

獎品代碼以嵌套元素的形式出現在較大的對象中,但現在我們將僅關注代碼。 這就是我得到的:

"codes" => {
  "0"=>{"Code"=>"1582566"},
  "1"=>{"Code"=>"2153094"},
  "2"=>{"Code"=>"3968052"},
  "3"=>{"Code"=>"4702730"},
  "4"=>{"Code"=>"5582567"},
  "5"=>{"Code"=>"6153097"},
  "6"=>{"Code"=>"7968052"},
  "7"=>{"Code"=>"8702730"},
  "8"=>{"Code"=>"9582567"},
  "9"=>{"Code"=>"1053097"}
}

從那里開始,一切都陷入一個塊,然后我分別處理每個代碼。

我將從我的最終解決方案開始,我們將朝后退。 為了獲得單個代碼,只是每個代碼中的數字,這是我的解決方案:

code[1].first.second.to_i返回1582566

現在讓我們倒帶,從頭開始。

code返回"0"=>{"Code"=>"1582566"}

那講得通。 現在,我想跳過第一級"0"

code[1]返回{"Code"=>"1582566"}

到目前為止,所有這些都說得通,但這就是事情變得怪異的地方。 從那時起,我想獲取第二個項目,也許您可​​以將其稱為此哈希鍵值對中的值。 不幸的是,ruby .second不能在哈希上工作,我收到undefined method錯誤,但是.first出於某種原因。 輸出使我感到困惑。

code[1].first ["Code", "4582566"]返回["Code", "4582566"]

現在突然之間,哈希是一個數組。 ruby .first array方法為什么將鍵值哈希轉換為數組?

我進行了一些偵查,發現:firstcode[1].methods的輸出中列出的方法,但是我似乎找不到關於它的作用的任何文檔。

code[1].class返回Hash

但是,為什么當我運行code[1].methods vs Hash.methods時,為什么會得到一組完全不同的可用方法呢? :first方法是在從輸出中列出code[1].methods不是在從輸出Hash.methods並且不是可用的方法的列表上任何這里:

http://ruby-doc.org/core-2.1.5/Hash.html

如果它們都是哈希,為什么可以使用它們的不同方法? 它與類方法和實例方法有關嗎?

我仍然對.first方法對哈希執行的操作感到困惑。

最后,我意識到了一種更好/更干凈的方法來獲取什么是code[1]['Code'].to_i ,但是我仍然對引擎蓋下發生的事情感到好奇。

在Ruby中, Hash是鍵/值對的有序集合 我們可以說它們是“有序的”,因為:

哈希值按插入相應鍵的順序枚舉其值。

由於此有序的枚舉,所以Enumberable#first方法返回作為兩個項[key, value]的數組添加到哈希中的第一個鍵/值對。

{}.first # => nil
{1 => 2}.first # => [1, 2]
{:a => true, :b => false}.first # => [:a, true]
h = Hash.new
h[:m] = "n"
h[:o] = "p"
h.first # => [:m, "n"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM