[英]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方法為什么將鍵值哈希轉換為數組?
我進行了一些偵查,發現:first
是code[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.