Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么ruby哈希键不相等 所以我有一个散列问题…我想:_Ruby - Fatal编程技术网

为什么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”…希望更好。