【问题标题】:ruby keep_if comparison of an array with stringruby keep_if 将数组与字符串进行比较
【发布时间】:2016-12-22 01:01:57
【问题描述】:

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

示例如下:

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 吗?

【问题讨论】:

    标签: arrays ruby


    【解决方案1】:

    keep_if 块内的keep_ele 已经是数组中的模型对象(项)。您应该改用以下比较:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多