如何将数组转换为哈希,其键是数组值,值是数组的索引

时间:2015-03-26 10:10:46

标签: ruby

数组格式如下(值不会在数组中重复):

["ID", nil, "MO"]

我想删除nil,但哈希值应该将索引存储在原始数组中。预期结果:

{
  "ID" => 0,
  "MO" => 2
}

我怎么能以优雅的方式做到这一点?

2 个答案:

答案 0 :(得分:5)

["ID", nil, "MO"]
.each.with_index.with_object({}){|(e, i), h| h[e] = i unless e.nil?}
# => {"ID"=>0, "MO"=>2}

["ID", nil, "MO"]
.each.with_index.to_h.reject{|k, v| k.nil?}
# => {"ID"=>0, "MO"=>2}

答案 1 :(得分:3)

您可以使用Hash#delete删除配对nil密钥:

hash = ["ID", nil, "MO"].each_with_index.to_h
hash.delete(nil)

或者作为一个单行:

["ID", nil, "MO"].each_with_index.to_h.tap { |h| h.delete(nil) }