我有一个变量id,我想用它作为散列中的一个键,这样分配给变量的值就被用作散列的键.

例如,如果我有变量id = 1,那么期望得到的散列值将是{ 1: 'foo' }.

我试着用,

{
  id: 'foo'
}

但这不起作用,反而会产生一个符号为:id'foo'的散列.

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

推荐答案

如果要用某些值填充新哈希,可以将它们传递给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}

所以在你的情况下:

Hash[id, 'foo']
Hash[[[id, 'foo']]]
Hash[id => 'foo']

最后一个语法id => 'foo'也可以与{}一起使用:

{ id => 'foo' }

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

h = {}
h[id] = 'foo'

Ruby相关问答推荐

我可以在Ruby中以散列的形式访问方法的关键字参数吗?

Ruby:程序终止后仅写入/保存/可见的文件数据

使用 Sorbet RBI 时需要 Elem

如何用 yield_self 断链

ASDF 上缺少 Ruby 版本

如果嵌套数组为空,如何判断 ruby​​?

Ruby:子字符串到一定长度,也到子字符串中的最后一个空格

从href html标签中提取带有Ruby中nokogiri的链接(URL)?

根据另一个数组的元素对数组进行排序

如何从最后一个元素开始遍历数组?

Ruby 中的抽象方法

include_examples和it_behaves_like有什么区别?

比较两个数组忽略Ruby中的元素顺序

Ruby 模板:如何将变量传递到内联 ERB?

如何打破Ruby中的外循环?

判断散列的键是否包含所有键集

Xcode - 配置:错误:在 $PATH 中找不到可接受的 C 编译器

如何在没有警告的情况下重新定义 Ruby 常量?

为什么这个 Ruby 对象同时具有 to_s 和 inspect 似乎做同样事情的方法?

如何在器上下文中运行 ruby​​ 脚本?