我试图找到一种优雅而紧凑的方式将哈希键转换为只包含值为true的数组
example = {"foo" => true, "bar" => false, "baz" => true}
成为
example = ["foo", "baz"]
答案 0 :(得分:4)
example = example.keys.select {|key| example[key].eql? true}
p example
输出
["foo", "baz"]
答案 1 :(得分:4)
最短的是example.select{|k, v| v}
提取密钥只需添加.keys
编辑:如果像Cary建议的那样,除了布尔值之外,您还必须检查v == true
或v.eql? true
答案 2 :(得分:1)
我的2美分:
example.collect{|k, v| k if v}.compact
输出:["foo", "baz"]
哪个也可以选错:
example.collect{|k, v| k if !v}.compact
输出:["bar"]
..或
答案 3 :(得分:0)
有很多不同的方法可以做到这一点。这是另一个:
example.reduce([]) { |memo, (k, v)| v ? memo << k : memo }
或者,类似地:
example.each_with_object([]) { |(k, v), memo| memo << k if v }
或者你可以使用我的坚果piecewise宝石:
example.piecewise { |yielder, (k, v)| yielder << k if v }