仅当散列键的值设置为true时,才能将散列键转换为数组的最佳方法

时间:2018-05-05 12:59:55

标签: ruby

我试图找到一种优雅而紧凑的方式将哈希键转换为只包含值为true的数组

example = {"foo" => true, "bar" => false, "baz" => true}

成为

example = ["foo", "baz"]

4 个答案:

答案 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 == truev.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 }