转换此数组:

a = ["item 1", "item 2", "item 3", "item 4"] 

...到散列:

{ "item 1" => "item 2", "item 3" => "item 4" }

i、 e.even个索引的元素为keysodd个索引的元素为values.

推荐答案

a = ["item 1", "item 2", "item 3", "item 4"]
h = Hash[*a] # => { "item 1" => "item 2", "item 3" => "item 4" }

就这样.*被称为splat操作符.

每个@Mike Lewis(在 comments 中)都有一个警告:"要非常小心.Ruby会在堆栈上扩展splats.如果你在一个 Big Data 集上这样做,那么你的堆栈可能会爆炸."

因此,对于大多数通用用例,这种方法非常好,但是如果你想对大量数据进行转换,可以使用不同的方法.例如,@Łukasz Niemier(也在 comments 中)为大型数据集提供了这种方法:

h = Hash[a.each_slice(2).to_a]

Ruby相关问答推荐

这是按引用传递/值传递的误解,导致此方法无法按预期输出吗?

使用 Sorbet RBI 时需要 Elem

Ruby 3 从多个预定纤程中收集结果

Ruby: initialize() vs 类体(class body)?

给url添加参数

Ruby 局部变量未定义

有没有办法通过哈希初始化对象?

如何按长度对 Ruby 字符串数组进行排序?

如果浮点组件不是 .00 sprintf/printf,则仅显示小数点

将 ruby​​ hash .default 设置为列表

复制文件,在 Ruby 中根据需要创建目录

CSV.read 第 x 行的非法引用

Ruby 中的抽象方法

你能用 Ruby 开发原生 iPhone 应用程序吗?

ActiveSupport::Memoizable 指的是哪种 Ruby memoize 模式?

很好地格式化输出到控制台,指定选项卡的数量

Ruby - time.now UTC

如何在 Rails 3 迁移中描述枚举列?

Ruby 的 %q / %Q 引用方法的用例是什么?

为什么 Ruby 有 TrueClass 和 FalseClass 而不是一个布尔类?