如何使用find从哈希数组中获取哈希?

时间:2014-05-30 13:11:48

标签: ruby arrays select hash

我的代码中有一个哈希集,声明了一个简单度:

eligibility_scale = [{family_size: 2, minimum_income: 20161, maximum_income: 38200},
                     {family_size: 3, minimum_income: 25393, maximum_income: 43000},
                     {family_size: 4, minimum_income: 30613, maximum_income: 47750},
                     {family_size: 5, minimum_income: 35845, maximum_income: 51600},
                     {family_size: 6, minimum_income: 41065, maximum_income: 55400},
                     {family_size: 7, minimum_income: 46297, maximum_income: 59250},
                     {family_size: 8, minimum_income: 51517, maximum_income: 63050}]

我正在尝试使用family_size作为搜索参数来获取哈希结果。

income_bracket = eligibility_scale.select{|h| h["family_size"] == 4 }
# Expecting: {family_size: 4, minimum_income: 30613, maximum_income: 47750}

运行此代码后,我得到一个空数组。

有关我做错的任何建议吗?

3 个答案:

答案 0 :(得分:2)

问题中的哈希键是符号,而不是字符串

您需要将密钥指定为符号:

替换以下内容:

h["family_size"]

使用:

h[:family_size]

答案 1 :(得分:1)

首先使用select会返回一个数组,所以如果你的family_size是唯一的,你可以使用find。否则,以相同的方式使用select,但期望返回一个哈希数组。

其次,你的哈希是使用符号,而不是字符串。理想情况下,你正在考虑写这样的东西:

eligibility_scale.find { |i| i[:family_size] == 4 }
# => {family_size: 4, minimum_income: 30613, maximum_income: 47750}

这是假设您的家庭规模是独一无二的。

答案 2 :(得分:0)

您已使用key: value语法定义了哈希值,这是:key => value的简写 - 意思是键是符号而不是字符串

eligibility_scale.select {|h| h[:family_size] == 4 }