我正在尝试从哈希中删除属性及其值。根据我在这里看到的答案看起来很简单,但它似乎对我不起作用。好奇,如果有人有任何想法为什么?另外......这不是链接问题的重复。我尝试过除了切片......这些都没有。我猜我的数据集不同。
以下是我的示例哈希:
{:data=>[{:id=>1, :make=>"Ford", :model=>"Excursion", :year=>2018, :color=>"silver", :vin=>"123456789F22"},{=>[{:id=>2, :make=>"Mazda", :model=>"RX7", :year=>1980, :color=>"blue", :vin=>"123456789F22"},{=>[{:id=>3, :make=>"Chevy", :model=>"Dorado", :year=>2018, :color=>"white", :vin=>"123456789F22"}]}
我尝试了以下内容:
hashval.delete("color")
hashval.except!("color")
hashval.each {|h| h.delete("color")}
我也尝试过:字符串格式错误的颜色
hashval.delete(:color)
hashval.except!(:color)
hashval.each {|h| h.delete(:color)}
但是当我尝试显示结果哈希
时 logger.info "hash result: #{hashval}"
我仍然看到原始哈希的颜色仍在那里。对我做错了什么的想法?
好的...更多信息!如果我这样做:
hashval.delete(:data)
它确实删除:数据(以及之后的所有其他内容)。那么它与哈希数组中的属性有关吗?
事实证明,答案是:
hashval = { data: vehicles.map { |v| v.table_data.except(:color) } }
我猜这个问题被标记为重复(尽管它没有),所以我无法添加解决方案。
答案 0 :(得分:1)
您的密钥是符号,hash.delete(:color)
应该有效:
h = {:id=>1, :make=>"Ford", :model=>"Excursion", :year=>2018, :color=>"silver", :vin=>"123456789F22"}
h.key?(:color) # => true
h.delete(:color)
h.key?(:color) # => false
h # => {:id=>1, :make=>"Ford", :model=>"Excursion", :year=>2018, :vin=>"123456789F22"}
同样hash
可能是保留字,因为如果我打开irb或console并输入hash
我会得到一个整数。我不知道它是什么,但它让我觉得hash
不应该用作var。
答案 1 :(得分:0)
hash#delete
,则可以使用
irb
irb(main):001:0> hash = {:id=>1, :make=>"Ford", :model=>"Excursion", :year=>2018, :color=>"silver", :vin=>"123456789F22"}
=> {:id=>1, :make=>"Ford", :model=>"Excursion", :year=>2018, :color=>"silver", :vin=>"123456789F22"}
irb(main):002:0> hash.delete(:color)
=> "silver"
irb(main):003:0> hash
=> {:id=>1, :make=>"Ford", :model=>"Excursion", :year=>2018, :vin=>"123456789F22"}