我试图比较一个字符串与一组对象.因此,当字符串值与数组中的该对象匹配时,它将保留它.
这是一个例子:
sample = [#<Model::ID:0x007fcb83ace8a0
type_id: 6,
parent_name: "Old Man",
child_name: "Junior">,
#<Model::ID:0x007fcb83abd0a0
type_id: 6,
parent_name: "Mary",
child_name: "Michelle">,
#<Model::ID:0x007fcb83abce70
type_id: 6,
parent_name: "Ole Bob",
child_name: "Bobby">]
name = "Michelle"
Run Code Online (Sandbox Code Playgroud)
所以我尝试了以下方法:
sample.keep_if { |keep_ele| [keep_ele]["child_name"] == name }
Run Code Online (Sandbox Code Playgroud)
这会返回以下错误:TypeError:没有将String隐式转换为Integer
但是当我在IRB并且输出时sample[1]["child_name"]它等于"Michelle"
那么我试过:
sample.keep_if { |keep_ele| keep_ele["child_name"] == name }
Run Code Online (Sandbox Code Playgroud)
它刚刚返回一个空数组: []
关于如何运行keep_if的任何想法?
keep_elekeep_if块内部已经是数组中的模型对象(item).您应该使用以下比较:
sample.keep_if { |keep_ele| keep_ele["child_name"] == name }
Run Code Online (Sandbox Code Playgroud)
请查看文档页面Array#keep_if.这是类似的例子:
sample = [
{
"child_name" => "Mike"
}, {
"child_name" => "Michelle"
}, {
"child_name" => "Joe"
}
]
name = "Michelle"
puts sample.keep_if { |keep_ele| keep_ele["child_name"] == name }
# => {"child_name"=>"Michelle"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |