从嵌套哈希数组中提取目标哈希值的问题求助
问题分析与解决
你用错方法了——select方法的作用是筛选出数组中所有满足条件的元素,返回一个数组,哪怕只有一个匹配项,也会被包裹在数组里,这就是测试里got是数组的原因。
题目要求返回单个哈希(找到的话)或者nil(没找到的话),你应该用find方法(它的别名是detect,功能完全一样):这个方法会遍历数组,返回第一个满足条件的元素,没有找到就返回nil,完美契合题目需求(而且提示里说了数组最多只有一个符合条件的哈希,不用担心多个匹配的情况)。
另外你代码里的块参数也有问题:数组的每个元素是一个哈希,所以块里应该接收单个参数(比如hash),而不是key, value——key, value是遍历哈希键值对时用的,这里遍历的是数组元素(哈希对象)。
正确实现代码
def find_favorite(array_of_hash_objects) array_of_hash_objects.find { |hash| hash[:is_my_favorite?] } end
补充说明
- 条件可以简化成
hash[:is_my_favorite?],因为这个键对应的值本身就是布尔值,不需要再和true做比较; - 如果数组里没有
is_my_favorite?为true的哈希,find会自动返回nil,正好符合题目要求。
内容的提问来源于stack exchange,提问作者Kat
相关产品推荐
相关产品推荐

