ruby keep_if数组与字符串的比较

时间:2016-08-15 19:19:53

标签: arrays ruby

我正在尝试将字符串与对象数组进行比较。因此,当字符串值与数组中的该对象匹配时,它将保留它。

以下是示例:

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"

所以我尝试了以下内容:

sample.keep_if { |keep_ele| [keep_ele]["child_name"] == name }

,这会返回以下错误: TypeError:没有将String隐式转换为Integer

但是当我在IRB中输出sample[1]["child_name"]时,它等于"Michelle"

然后我尝试了:

sample.keep_if { |keep_ele| keep_ele["child_name"] == name }

它刚刚返回一个空数组:[]

关于如何运行keep_if的任何想法?

1 个答案:

答案 0 :(得分:5)

keep_ele块中的

keep_if已经是数组中的模型对象(item)。您应该使用以下比较:

sample.keep_if { |keep_ele| keep_ele["child_name"] == name }

查看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"}