【问题标题】:ruby hash check if value exists红宝石哈希检查值是否存在
【发布时间】:2020-07-29 01:10:55
【问题描述】:

一定是一个简单的问题.. 但我似乎找不到答案。 我正在尝试检查哈希中的特定键是否存在值。

hash = {{"name" => "John", "Loc" => "US", "fname" => "John Doe"},
        {"name" => "Eve", "Loc" => "UK", "fname" => "John Eve"}}

目前我正在遍历哈希,以检查if h["name"] = "John"...

我正在寻找.include.has_value? 类型的方法是否可用。我阅读了有关哈希的文档和手头上的一本书,但找不到。

我认为像if hash["name"].has_value?("John") 这样的东西比遍历哈希更有用。提前感谢您的帮助!

【问题讨论】:

  • 如果确定散列数组的哪些元素(例如,arr)包含"name"=>"John" 很有用,您可以这样做:arr.size.times.select { |i| arr[i]["name"] == "John" }。这将返回一个(可能为空的)arr 的索引数组,对应于匹配的哈希值。

标签: ruby hash


【解决方案1】:

首先我们的哈希不是一个有效的哈希。我想你想要一个这样的哈希数组

array = [
  { "name" => "John", "Loc" => "US", "fname" => "John Doe" },
  { "name" => "Eve",  "Loc" => "UK", "fname" => "John Eve" }
]

那么你可以这样做:

array.select { |hash| hash['name'] == 'John' }
# => returns [{"name" => "John", "Loc" => "US", "fname" => "John Doe"}] 

array.any? { |hash| hash['name'] == 'John' }
# => true

【讨论】:

  • 谢谢!正是我需要的... =]
  • 为什么使用 .include? 而不是 == ?有没有比array.select { |hash| hash['name'] == 'John' }更简单的优势?
猜你喜欢
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多