【发布时间】:2015-07-28 19:34:49
【问题描述】:
我正在尝试将哈希的键与数组的内容进行比较。如果匹配,我希望从哈希中删除该项目。
allocate = {:item1=>[1, 1], :item2=>[1, 2], :item3=>[1, 3]}
bad = [:item2, :item4]
这很好用:
allocate.tap{ |h| h.delete(:item1)}
allocate
=> {:item2=>[1, 2], :item3=>[1, 3]}
如果我从“坏”数组中调用一个值,这些值将作为字符串返回,而不是作为符号返回。
bad[1]
=> "item4"
循环也会发生这种情况:
bad.each do |bad|
allocate.tap{ |h| h.delete(bad)}
puts bad
end
=> "item2"
=> "item4"
allocate
=> {:item1=>[1, 1], :item2=>[1, 2], :item3=>[1, 3]}
出于性能原因,我想将哈希键和数组保留为符号。我需要做什么才能访问“坏”数组并将项目保留为符号,以便我可以正确地将其与分配哈希进行比较?
我正在使用 Ruby v 2.1.3p242。
【问题讨论】:
-
“如果我从“坏”数组中调用一个值,这些值将作为字符串返回,而不是作为符号返回。” - 尝试仔细检查这个假设。这不应该是真的。使用
puts [:item2, :item4][1] == :item4尝试一个简单的 Ruby 程序 -
您确定有问题吗?
bad = [:item2, :item4] => [:item2, :item4]。然后bad[1] => :item4和p bad[1]打印:item4,但puts bad[1]打印"item4"。你在哪里说bad[1] => "item4",确定不是puts bad[1]?