如何优雅简洁地提取哈希中值为true的键并转换为数组?
优雅紧凑地将哈希中值为true的键转为数组
嘿,在Ruby里处理这个需求真的有不少简洁又优雅的写法,我给你分享几个常用的:
select+keys组合写法
这是比较直观的思路:先筛选出所有值为true的键值对,再提取键组成数组,逻辑清晰易懂:hash = {"foo" => true, "bar" => false, "baz" => true} result = hash.select { |k, v| v }.keys # => ["foo", "baz"]filter_map一步到位(Ruby 2.7+)
这是Ruby较新版本引入的方法,直接把筛选和映射合并成一步——遍历哈希时,符合条件就返回键,自动过滤掉不符合条件的nil,代码最紧凑:hash = {"foo" => true, "bar" => false, "baz" => true} result = hash.filter_map { |k, v| k if v } # => ["foo", "baz"]each_with_object遍历式写法
如果想更清晰地控制遍历收集的过程,这个方法也很实用:用一个空数组作为容器,遍历哈希时把符合条件的键塞进去:hash = {"foo" => true, "bar" => false, "baz" => true} result = hash.each_with_object([]) { |(k, v), arr| arr << k if v } # => ["foo", "baz"]
其中filter_map应该是最贴合你“优雅且紧凑”需求的写法,既精简又可读性拉满~
内容的提问来源于stack exchange,提问作者Federico Days
相关产品推荐
相关产品推荐

