数组格式如下(值不会在数组中重复):
["ID", nil, "MO"]
我想删除nil
,但哈希值应该将索引存储在原始数组中。预期结果:
{
"ID" => 0,
"MO" => 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) }