繁体   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