Ruby - 从Hash中删除值

时间:2018-03-14 14:40:40

标签: ruby-on-rails ruby

我正在尝试从哈希中删除属性及其值。根据我在这里看到的答案看起来很简单,但它似乎对我不起作用。好奇,如果有人有任何想法为什么?另外......这不是链接问题的重复。我尝试过除了切片......这些都没有。我猜我的数据集不同。

以下是我的示例哈希:

 {: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) } }

我猜这个问题被标记为重复(尽管它没有),所以我无法添加解决方案。

2 个答案:

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