ruby-on-rails
  • ruby
  • 2015-06-24 83 views 0 likes 
    0

    我有一些數據:刪除嵌套哈希元素

    data = { 
    "total_records"=>3, 
    "records"=> 
        [{"title"=>"Val1", 
        "coins"=>1}, 
        {"title"=>"Val2", 
        "coins"=>1}, 
        {"title"=>"Val3", 
        "coins"=>1}] 
    } 
    

    我怎麼會去刪除有title = 'Val1'||'Val2'記錄?

    我試圖沿着這些路線的東西:

    @data.records.each_value do |e| 
        if exceptions.include?(e.title) 
         delete @envelopes.records.e 
        end 
        end 
    

    但我得到@data.records無方法錯誤。

    +0

    「不是有它」 不是一個有效的問題描述。還沒有顯示沒有的代碼。 – user2864740

    +0

    這是一個沒有方法的錯誤,當我在散列上調用它時 – xHocquet

    +0

    當它(「某個消息」)被髮送到nil *時沒有引發任何方法錯誤。這是一個非常基本的錯誤 - 當預料到什麼時,什麼都沒有(零)。在這種情況下,'@ data'可能是零 - 是否被分配/加載? – user2864740

    回答

    1

    這麼簡單

    data['records'].delete_if{ |h| %w(Val1 Val2).include?(h['title']) } 
    
    +0

    定義包含要刪除的值的'delete_if'塊之外的數組:vals =%w(Val1 Val2); data ['records']。delete_if {| h | vals.include?(h ['title'])}'。只有兩個條目可以快10%左右,而且隨着data ['records']'或'vals'的增長,速度會更快。就像這樣,每次都浪費CPU的'delete_if'循環必須重新定義數組。 –

    +0

    這就是我最終做的,我有我的異常數組,我匹配。 – xHocquet

    0

    你也可以這樣做:

    data['records'].delete_if{ |h| (h['title'] == 'Val1') || (h['title'] == 'Val2') } 
    
    相關問題