【问题标题】:Ruby - Delete a value from arrayRuby - 从数组中删除一个值
【发布时间】:2019-07-31 08:13:33
【问题描述】:

当我尝试从数组中删除一个值并使用相同的数组对象映射以创建新数组但它无法正常工作时出现错误未定义方法“删除”。

@test = ["ab","cd","ef"]
@test.map.delete("ab")

NoMethodError(未定义的方法“删除”#)

【问题讨论】:

  • 地图后不能链式删除。你不能解释一下你想做什么吗?
  • 我想从数组中删除一个值并映射到与新数组相同的数组对象,以便我可以在不同的方法中使用
  • test - [‘ab’] 怎么样?
  • 还是不行
  • @AnsonG 你试过使用delete_if吗?它删除 self 的每个元素,块的计算结果为真。每次调用块时,数组都会立即更改。

标签: ruby ruby-on-rails-3 ruby-on-rails-5


【解决方案1】:

您也可以使用tap 尝试此操作,

irb(main):009:0> test = ["ab","cd","ef"]
=> ["ab", "cd", "ef"]
irb(main):010:0> test.tap {|i| i.delete("ab")}
=> ["cd", "ef"]

或者

irb(main):019:0> test = ["ab","cd","ef"]
=> ["ab", "cd", "ef"]
irb(main):020:0> test -= ["ab"]
=> ["cd", "ef"]

或者你可以使用delete_if

irb(main):031:0> @test = ["ab","cd","ef"]
=> ["ab", "cd", "ef"]
irb(main):032:0> @test.delete_if{|i|i=="ab"}
=> ["cd", "ef"]
irb(main):033:0> @test
=> ["cd", "ef"]

【讨论】:

    【解决方案2】:

    我想你的意思是使用 reject 之类的东西?

    如果要从数组中删除具有匹配字符串的项,可以执行以下操作:

    test = ["ab","cd","ef"]; test.reject{|a| a == "ab"}
    

    【讨论】:

      【解决方案3】:

      @test 是数组对象,@test.map 将返回枚举器对象。 delete 是数组方法而不是枚举器方法。

      您可以直接拨打delete@test

      @test.delete('ab') 
      

      【讨论】:

      • 但是当我导航到不同的方法并访问@test时,我得到了所有的值,包括删除的值('ab')。
      • 我试用了 ray 的解决方案,它对我有用。 @test 变量是否正在其他地方更新? repl.it/repls/WindyNaiveOrder
      • 是的,它也以其他方式更新,无论如何,谢谢现在解决了它的工作问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      相关资源
      最近更新 更多