2011-08-05 52 views
10

我有一个Ruby的哈希值,看起来像这样:得到第一个项目出一个Ruby数组的哈希

h = {"side1"=>["green", "Green"], "side2"=>["verde", "Verde"]} 

我怎样才能在哈希特定的键获取第一个(或最后一个)项目?

+2

'puts h ['side2] .first'是完全有效的语法。 'puts h ['side2] [0]'也可以。 –

+2

我不明白为什么人们低估这个问题。我是新来的stackoverflow,但似乎这里downvoting是一种rtfm。如果问题是明确的,你可以从中学习,这在我的书 – BF4

+0

^IMO根据要求,不知道为什么会需要这个设施。如果数据结构得到正确使用,并且执行同样好(没有黑客);那么你不会需要这个。毕竟你使用key选择散列元素而没有别的,或者我们使用数组。另外问题应该是'散列的第一个元素'。散列中的数组意味着别的东西。 – Ninad

回答

6

其实,你的问题中的示例伪代码是正确的。

为了您的哈希

h = { 
    "side1" => ["green", "Green"], 
    "side2" => ["verde", "Verde"] 
} 

键是'side1''side2'(与他们的价值观hashrocket右)

所以h['side2'].first说,对关键'side2'值,得到的第一个元素值为["verde", "Verde"],这是一个数组。 h['side2'][0]也可以工作。别名first是一种方便的方法。

要获取数组的最后一个元素而不必知道它有多大,请使用负索引。例如h['side2'][-1],在这种情况下相当于h['side2'][1]

请注意,散列中的键具体是关于它是字符串还是符号。这是h[:side2]将返回零,因为密钥尚未设置。 Rails有一个类HashWithIndifferentAccess,它将符号和字符串视为等效键。

编辑

我应该提到,我测试了我的答案irbirb是一个很好的方式来测试你的想法可能会和可能无法工作。在终端提示符下,输入irb,进入并使用ruby。

+0

谢谢!我没有尝试自己的答案,因为我认为这是行不通的。我是使用Ruby哈希的新手。 – Andrew

+0

没问题。当你想要使用功能时,irb是非常有用的,特别是因为ruby是如此的动态,你可以做任何事情。我一直使用它,就像(修改为在一行中可以粘贴):class String;狂野; “野生”;结束;结束; bar =“foo”;放bar.wild; def bar.wild; “和疯狂”;结束;放bar.wild – BF4

2

是的。 puts h["side2"].first应该工作。我想这表明Ruby遵循最少惊喜的原则,即你的伪代码和实际的代码一样。 :-)

6

我遇到了类似的情况,我从任意一个测试代码中随意选择散列中的“第一个”条目。这不是这个问题的真正含义,但它出现在我跑过的搜索中,所以它可能对其他人也这样做。

当然,“第一项”在散列中是任意的,但是keys方法将返回按某种魔法排序的所有键的列表。如果你喜欢该排序顺序,那么你就可以

h[h.keys.first] 
5

任何哈希具有键和值 获得了“第一”的方法,你可以简单地

hash.values.first 
hash.values.last 
hash.keys.first 
hash.keys.last 

那么你将有值的数组你想要第一次或最后一次

相关问题