【问题标题】:How to check whether a value exists in a Ruby structure?如何检查一个值是否存在于 Ruby 结构中?
【发布时间】:2015-01-19 08:43:06
【问题描述】:

我曾经有一系列独立的数组(例如name()id()description())。我曾经可以通过name.include?("Mark") 来检查特定数组中是否存在值

现在我转向了一种更优雅的方式来管理不同的这些独立数组(这里是背景:How do I convert an Array with a JSON string into a JSON object (ruby)),我正试图弄清楚我是如何做到这一点的。

简而言之,我将所有独立数组放在一个结构中,以便我可以将内容引用为object().nameobject().idobject().description

但是我现在想知道如何检查object 数组在其name 结构中是否具有值“Mark”。

我试过object.name.include?("Mark"),但不太喜欢。

我也尝试过使用has_value?,但这似乎也不起作用(可能是因为在我将其导入结构之前它曾经是一个哈希,但现在不再是一个哈希 - 请参见此处: How do I convert an Array with a JSON string into a JSON object (ruby))

想法?如何检查 object.name 是否包含某个字符串?

谢谢。

【问题讨论】:

  • array_of_customers[1][:name].include? 'John' #=> true
  • 你的问题难以理解。 name()(带括号)如何成为数组而不是方法?我无法解析你的句子“......管理不同的这些独立数组”不清楚object().name等在做什么。我以为您声称 name() 是一个数组,但现在您将其称为“name 结构”。那是什么?
  • 对@sawa 造成的困惑感到抱歉。我对编程很陌生,所以我尽量使用术语。对于我引用的帖子中的建议,我不能完全使用适当的术语(这很适合我的需要)。 object(根据我上面的问题)本质上是一个数组,并且这些项目是一个“结构”,它是从散列生成的。在原始哈希中,name 是一个字符串,其角色是哈希键/值对中的键。请参阅链接的另一个问题,因为有哈希数组的输出。谢谢。

标签: ruby arrays json


【解决方案1】:

如果你想找到所有叫Mark的客户,你可以这样写:

customers_named_mark = array_of_customers.select{|c| c.name == 'Mark' }

这将返回一个可能为空的数组。 如果你想找到第一个名为Mark的客户,写

customer_named_mark = array_of_customers.detect{|c| c.name == 'Mark' }

这将返回第一个匹配项或 nil。

【讨论】:

  • 谢谢@nathanvda。我认为有某种捷径(例如 include?或 has_value?)Vs 必须遍历整个数组,但这会做!谢谢!
  • @mreferre 我很确定Array#include?Hash#has_value? 也会横穿整个数组/散列。
  • @ajedi 检查Array#include? 的文档:你必须给它一个相同的值,它使用相等运算符。在这种情况下,您希望在具有给定名称的客户数组中查找所有客户。除非您使用自定义类,并定义一个相等运算符来确保 Customer.new(name: 'Freddy') == 'Freddy'(我会避免),否则您将不得不使用给定的解决方案。
  • @nathanvda 请阅读我回复的评论。我不是说使用Array#include?Hash#has_value? 将是解决此问题的合适方法。我只是在纠正 OP 似乎对这些方法的实现存在的误解。
猜你喜欢
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 2022-07-11
  • 2017-09-25
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
相关资源
最近更新 更多