Arrays 如何检查数组是否包含某个值?
我正在使用以下形式的数组:Arrays 如何检查数组是否包含某个值?,arrays,ruby,Arrays,Ruby,我正在使用以下形式的数组: "car_documents_attributes"=>{ "1562523330183"=>{ "id"=>"", "filename"=>"tyYYqHeqSFOnqLHEz5lO_rc_tispor12756_6wldwu.pdf", "document_type"=>"contract" }, "1562523353208"=>{ "id"=>"", "file
"car_documents_attributes"=>{
"1562523330183"=>{
"id"=>"", "filename"=>"tyYYqHeqSFOnqLHEz5lO_rc_tispor12756_6wldwu.pdf", "document_type"=>"contract"
},
"1562523353208"=>{
"id"=>"", "filename"=>"a9P8TyECRiKbI2YdRVZy_rc_tispor12756_bbtzdz.pdf", "document_type"=>"request"
},
"1562523353496"=>{
"id"=>"", "filename"=>"WCM5FHOfSw6yNSUrfPPm_rc_tispor12756_dqu9r2.pdf", "document_type"=>"notes"
},
...
}
我需要找出此数组中是否有document\u type
=contract
(可以没有、一个或多个)
我这样做的方式是逐项循环遍历数组,如果有几十个项,这可能会很慢
有没有更好更快的方法可以简单地检查数组中是否有一个具有
文档类型的项目
=契约
?这是一个包含更多散列的散列。您可以访问car\u documents\u属性
,迭代这些散列值,并检查是否有document\u类型
是“合同”:
不知道这是来自params的数据。如果是这样,您确实需要允许接收的内容,或者将参数转换为不安全的散列 此外,在尝试获取
car\u documents\u attributes
时,您可以尝试使用fetch
而不是[]
,因为如果该键不在data
中,它将抛出nil
,这将抛出一个命名错误:
data.fetch('car_documents_attributes', []).any? { |_, doc| doc['document_type'] == 'contract' }
这是一个包含更多哈希的哈希。您可以访问
car\u documents\u属性
,迭代这些散列值,并检查是否有document\u类型
是“合同”:
不知道这是来自params的数据。如果是这样,您确实需要允许接收的内容,或者将参数转换为不安全的散列 此外,在尝试获取
car\u documents\u attributes
时,您可以尝试使用fetch
而不是[]
,因为如果该键不在data
中,它将抛出nil
,这将抛出一个命名错误:
data.fetch('car_documents_attributes', []).any? { |_, doc| doc['document_type'] == 'contract' }
非常感谢。但是,我需要向#添加
,因为代码为#
数据['car\u documents\u attributes']抛出错误rails undefined method
any'?{…`是的,ActionController::Parameters
是一个不同的实现,需要将其转换为“不安全”散列以调用某些方法。请参阅编辑。谢谢。但是,我需要将添加到\u unsafe\u h
,因为代码为#数据抛出错误rails undefined method
any'['car_documents_attributes'].to_unsafe_h.any?{…`是的,ActionController::Parameters
是另一个实现,需要转换为“unsafe”散列才能调用某些方法。请参见编辑。示例中没有数组。示例中没有数组。