为什么ruby哈希键不相等 所以我有一个散列问题…我想:
我有两个比较的散列。在我的代码中的某个时刻,我得到了一个响应,比如为什么ruby哈希键不相等 所以我有一个散列问题…我想:,ruby,Ruby,我有两个比较的散列。在我的代码中的某个时刻,我得到了一个响应,比如 @moves = {:wm01 => {:a1=>"O", :a2=>" ", :a3=>" ", :b1=>" ", :b2=>"O", :b3=>" ", :c1=>" ", :c2=>" ", :c3=>" "} 这对应于应答密钥散列 @anskey = { :wm01=>":c3",:wm02=>":c2",:wm03=>":c1",
@moves = {:wm01 => {:a1=>"O", :a2=>" ", :a3=>" ", :b1=>" ", :b2=>"O", :b3=>" ", :c1=>" ", :c2=>" ", :c3=>" "}
这对应于应答密钥散列
@anskey = {
:wm01=>":c3",:wm02=>":c2",:wm03=>":c1",:wm04=>":b3",:wm05=>":b1",:wm06=>":a3",:wm07=>":a2",:wm08=>":a1",
:wm09=>":a3",:wm10=>":c1",:wm11=>":a1",:wm12=>":c3",:wm13=>":c3",:wm14=>":c1",:wm15=>":c3",:wm16=>":a1",
:wm17=>":b1",:wm18=>":b2",:wm19=>":b3",:wm20=>":a2",:wm21=>":b2",:wm22=>":b2",:wm23=>":c2",:wm24=>":b2"
}
在这种情况下,我需要迭代@anskey,其中@moves.keys==@anskey.keys (看起来很简单,但似乎不起作用) 然后设置
my_answer_is = @anskey.value
那么像这样的事
@anskey.each do |key. value|
if @moves.keys == key
my_answer_is = @value
end
end
下面是有问题的代码
字符串不是符号 您的一个散列包含类似于
“:c3”
的字符串,它不等于:c3
*
您可以使用.to_sym
将字符串转换为符号,或使用将符号转换为字符串。to_s
正如Max所说,没有(好的?)理由存储字符串而不是符号;如果可以更改代码,请使用符号作为值和键,并完全跳过转换。这是首选,国际海事组织
*除非您在Rails中,或者使用了与
hashwithindifferencetaccess
等效的字符串,否则字符串不是符号
您的一个散列包含类似于“:c3”
的字符串,它不等于:c3
*
您可以使用.to_sym
将字符串转换为符号,或使用将符号转换为字符串。to_s
正如Max所说,没有(好的?)理由存储字符串而不是符号;如果可以更改代码,请使用符号作为值和键,并完全跳过转换。这是首选,国际海事组织
*除非您在Rails中或使用与
hashWithInferenceAccess等价的当您说@moves.keys
时,您会得到@moves
中所有键的数组
在行中,如果@moves.keys==key
,则尝试将单元素数组[:wm01]
与符号:wm01
进行比较,但它们永远不会相等,因为它们是不同的类型
如果您知道@moves
在代码中只有一个键,您可以通过执行@moves.keys.first
来获得它。然后使用该键索引到@anskey
,而不是在其中循环:
@anskey[@moves.keys.first]
您不应该通过哈希循环检查所有键是否相等。散列的要点是,hash[key]
语法提供了key
的值,而不需要任何循环。当你说@moves.keys
时,你会得到@moves
中所有键的数组
在行中,如果@moves.keys==key
,则尝试将单元素数组[:wm01]
与符号:wm01
进行比较,但它们永远不会相等,因为它们是不同的类型
如果您知道@moves
在代码中只有一个键,您可以通过执行@moves.keys.first
来获得它。然后使用该键索引到@anskey
,而不是在其中循环:
@anskey[@moves.keys.first]
您不应该通过哈希循环检查所有键是否相等。散列的要点是,hash[key]
语法为您提供key
的值,而无需任何循环。无需转换。他可以将符号存储为散列中的值。@Max是的,我知道,但他没有,所以我根据他的代码回答。不需要转换。他可以将符号存储为散列中的值。@Max是的,我知道,但他没有,所以我根据他的代码回答。“在这种情况下,我需要迭代@anskey,其中@moves.keys==@anskey.keys”。那句话毫无意义。你想做什么?越过那句话…最终我需要说我的答案是=“:c3”…希望更好。“在这种情况下,我需要迭代@anskey where@moves.keys==@anskey.keys”。那句话毫无意义。你想做什么?越过那句话…最终我需要说我的答案是=“:c3”…希望更好。