检查 Ruby 哈希中是否存在多个键值对?

Shp*_*ord 2 ruby hash

我有以下 Ruby 哈希键值对:

[
   {
      "trait_type"=>"Status", 
      "value"=>"Unbuilt", 
      "display_type"=>nil, 
      "max_value"=>nil, 
      "trait_count"=>4866, 
      "order"=>nil
   }
]
Run Code Online (Sandbox Code Playgroud)

我需要检查的是以下键值对是否存在:

{
   "value"=>"Unbuilt", 
   "trait_type"=>"Status"
}
Run Code Online (Sandbox Code Playgroud)

本质上想要一些东西来达到...的效果

traits = [{"trait_type"=>"Status", "value"=>"Unbuilt", "display_type"=>nil, "max_value"=>nil, "trait_count"=>4866, "order"=>nil}]
filter_traits = {"value"=>"Unbuilt", "trait_type"=>"Status"}

traits.include? filter_traits
Run Code Online (Sandbox Code Playgroud)

jam*_*iew 6

如果您使用 ruby​​ >= 2.3,则有一个奇特的新Hash >= Hash操作,其概念上类似于假设的contains?

使用你的traits数组:

trait = traits[0]
trait >= {"trait_type" => "Status", "value" => "Unbuilt"}
# => true

trait >= {"trait_type" => "Status", "value" => "Built"}
# => false
Run Code Online (Sandbox Code Playgroud)

所以你可以尝试这样的事情:

traits.select{|trait|
  trait >= filter_traits
}.length > 0
# => true
Run Code Online (Sandbox Code Playgroud)

  • 很高兴了解 [Hash#>=](https://ruby-doc.org/core-2.7.0/Hash.html#method-i-3E-3D),它非常适合这个问题。 (3认同)