从Ruby中的变量创建哈希键?

Jam*_*hon 53 ruby syntax hash

我有一个变量id,我想将它用作散列中的键,以便分配给变量的值用作散列的键.

例如,如果我有变量,id = 1那么所需的结果将是{ 1: 'foo' }.

我试过创建哈希,

{
  id: 'foo'
}
Run Code Online (Sandbox Code Playgroud)

但是,这并不工作,而不是导致与符号的哈希:id'foo'.

我可以发誓我以前做过这件事,但我完全是在画一个空白.

Gum*_*mbo 89

如果要使用特定值填充新哈希,可以将它们传递给Hash::[]:

Hash["a", 100, "b", 200]             #=> {"a"=>100, "b"=>200}
Hash[ [ ["a", 100], ["b", 200] ] ]   #=> {"a"=>100, "b"=>200}
Hash["a" => 100, "b" => 200]         #=> {"a"=>100, "b"=>200}
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下:

Hash[id, 'foo']
Hash[[[id, 'foo']]]
Hash[id => 'foo']
Run Code Online (Sandbox Code Playgroud)

最后一种语法id => 'foo'也可以用于{}:

{ id => 'foo' }
Run Code Online (Sandbox Code Playgroud)

否则,如果哈希已存在,请使用Hash#=[]:

h = {}
h[id] = 'foo'
Run Code Online (Sandbox Code Playgroud)

  • 我对问题本身感到困惑,现在这个答案让我倍感困惑。:( 你能告诉我 OP 在问什么吗? (3认同)
  • 嗯,所以旧样式的哈希语法有效,但新样式无效。谢谢。 (2认同)
  • 在 `Ecmascript 6` 中,您可以使用 `variables` 构建哈希,例如 `a = {"a": 100}` 和 `b = {"b": 200}`,然后 `{a, b}` 将是 `=> {"a": 100, "b": 200}` 但我不相信 ruby​​ 中存在这个功能 (2认同)