首页 > 解决方案 > ruby/索引哈希/空 nil

问题描述

具有以下索引哈希:

{
  '1' => { a: :b },
  '2' => { c: :d },
  '3' => nil,
  '4' => { e: :f }
}

我会在删除空键的同时研究“重置”索引键;换句话说,产生以下内容:

{
  '1' => { a: :b },
  '2' => { c: :d },
  '3' => { e: :f }
}

获得这种结果的最佳方法是什么?

标签: arraysrubyhash

解决方案


只需过滤值并分配新键。

hash.
  values.
  reject(&:nil?). # or `compact`, credits to @KimmoLehto
  map.
  with_index(1) { |v, i| [i.to_s, v] }.
  to_h
#⇒ {"1"=>{:a=>:b}, "2"=>{:c=>:d}, "3"=>{:e=>:f}}

另请参阅@Stefan 的宝贵评论,以获得更简洁的 2.5+ 版本,使用Hash#transform_keys.


推荐阅读