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