从ruby中的哈希数组中获取值

时间:2018-04-15 19:28:19

标签: ruby

我有一系列哈希:

ary = [{1=>"January", 2=>"February", 3=>"March"}, {11=>"Oct", 12=>"Nov", 13=>"Dec"}]

如何根据密钥从特定哈希中获取值?我想做点什么:

ary[1].select{|h| h[13]} 

使用键"Dec"从第二个哈希值中获取值13。上面的语句返回整个第二个哈希值,这不是要求:

{11=>"Oct", 12=>"Nov", 13=>"Dec"}

3 个答案:

答案 0 :(得分:1)

select语句将返回带有键13的所有哈希值。

如果你已经知道哪个哈希有密钥,那么下面的代码将给你答案。

let test = ['empty_250x380@3x.png',
'empty_250x380@3x.png',
'empty_250x380@3x.png',
'empty_250x380@3x.jpg',
'empty_250x380@3x.png','empty_250x380@3x.png']

function check(arr) {
   return Array.isArray(arr) && arr.every(i=>['.jpg','.png'].indexOf(i.slice(-4))!== - 1)
}
console.log(check(test))

但是,如果您不确定数组中的哪个哈希值具有该值,则可以执行以下操作:

ary[1][13]

值将具有来自具有键13的所有哈希值的键13的值。

答案 1 :(得分:0)

您可以将两个哈希合并为一个,然后查询合并哈希的键。

c = a.merge(b)
  => {1=>"January", 2=>"February", 3=>"March", 11=>"Oct", 12=>"Nov", 13=>"Dec"}

然后你可以这样做:

c[1]
  => "January"

否则,如果你想将格式保存为不同哈希的数组,你可以通过这种方式得到你想要的值:

ary[1][12]
  => "Nov"

但是这样你必须总是知道数组中的哪个哈希是你想要的元素,这看起来有点令人困惑,因为你可以使用不同的哈希而不是哈希数组,并且必须记住每个哈希的位置。阵列。

答案 2 :(得分:0)

先做一个hash,然后key返回hash的值。

使用合并元素从数组中生成单个散列。

  • 方法一

    hash = ary.reduce({}, :merge)

  • 方法二

    hash = ary.inject(:merge)

然后按键返回值。

hash[13]