Ruby 打印特定值的键

Ruby 打印特定值的键,ruby,hash,Ruby,Hash,我有一个类似于以下内容的哈希: hash = {key1: true, key2: false, key3: false, key4: true} 我想遍历散列并打印每个具有true值的键。结果应该如下所示: key1 key4 我该怎么做?我试过: hash.each do |k,v| puts k if true end 这很简单: hash.each do |k,v| puts k if v end 虽然迭代很好,但目标可能会以更为鲁比的方式实现: hash.selec

我有一个类似于以下内容的哈希:

hash = {key1: true, key2: false, key3: false, key4: true}
我想遍历散列并打印每个具有
true
值的键。结果应该如下所示:

key1 
key4
我该怎么做?我试过:

hash.each do |k,v|
  puts k if true
end
这很简单:

hash.each do |k,v|
  puts k if v
end

虽然迭代很好,但目标可能会以更为鲁比的方式实现:

 hash.select { |_, v| v }.keys
或者,如果与
true
(与真实相反)相等是重要的:

 hash.select { |_, v| v == true }.keys
要打印结果,请执行以下操作:

 puts hash.select { |_, v| v == true }.keys
关于如何工作的更多信息

要打印匹配为“键1和键4”的所有键:

puts hash.select { |_, v| v == true }.keys.join(' and ')

您可以使用
map
compact
方法:

hash.map { |k, v| k if v }.compact

为了得到作者提出的问题的结果,我们需要
放入hash.select{code>,v | v}.keys
@mudasobwa我是一个ruby初学者,根本不知道括号内发生了什么。括号内有一个所谓的块,传递给
选择
迭代。Select方法将在散列中的每个元素上调用一个块,将
-
对传递给该块。无论块是否返回
true
,元素都将保留在结果数组中。请查看答案的更新。只需查询一下您对
\uuu
的使用情况即可?使用这个特殊字符有什么原因吗?Thanks@Stefan哦,对不起,我的错,我把二郎/长生不老药弄得一团糟。在ruby中,它仍然是可访问的。你没有在循环中使用值
v
。我也有点被否决票弄糊涂了。也许有一些反馈?虽然您的答案可能仍然适用,但应该注意的是,
Hash#compact
是Rails方法,而不是Ruby方法。在这个实现中,我将如何为任何大于1的键加入
字符串。表示:第一个键为真,输出为
key1
,但如果超过第一个键,则为
key1和key2@supersize我不明白你的意思。但这听起来像是另一个问题。如果是这样,请在一个新的线程上作为独立问题提问。
hash.map { |k, v| k if v }.compact