You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅简洁地提取哈希中值为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:24:53