基于哈希值将 Ruby 哈希键转换为数组的条件语句

3

当满足条件时,我想将哈希表(hash)键的值提取到数组中。例如,对于哈希表h,我想提取值为“true”的键:

h = { :a => true, :b => false, :c =>true }

我想到了这个方案:
h.map {|k,v| k if v==true} - [nil]

有其他替代品吗?

map和select方法是别名,所以你可以使用其中之一。 - sbagdat
2
更准确地说,mapcollect是别名,而不是selectselect的工作不同,在哈希的情况下返回不同类型:它返回哈希,而map/collect返回数组。 - NIA
2个回答

15
h.select { |_, v| v }.keys

会做同样的事情,但以更易读的方式呈现。


很好,谢谢。不过,如果想要返回一个数组,你需要使用 to_a。 - DavB
2
“keys” 返回一个“数组”。它还会返回什么? - Jörg W Mittag
这是一种聪明的方式,但我不确定它是否是“更易读的方式”。 - Drazen
1
为什么不呢?这是更一般的情况,因为它将允许所有“真”值,而不仅仅是 true(在 Ruby 中,与 Scheme 一样,在条件中除了 nilfalse 之外的任何东西都是 true,但 1 != true)。 - Hauleth

0

你也可以这样做

s = {}
h.each do |k,v|
   s[k] = v if v==true
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接