代码之家  ›  专栏  ›  技术社区  ›  Garfield

Ruby:这个“双维散列”需要处理

  •  1
  • Garfield  · 技术社区  · 16 年前

    我有这个:

    h = {  1 => { 1 => {:a => "x", :b => "y", :c => "z"}, 
                  2 => {:a => "xx", :b => "yy", :c => "zz"}
                 }, 
           2 => { 1 => {:a => "p", :b => "q", :c => "r"}, 
                  2 => {:a => "pp", :b => "qq", :c => "rr"}
                }
        }
    

    result = {  1 => { 1 => {:a => "x"}, 
                       2 => {:a => "xx"}
                 }, 
                2 => { 1 => {:a => "p"}, 
                       2 => {:a => "pp"}
                }
        }
    

    有什么好办法?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Mladen Jablanović    16 年前

    一个例子不能真正定义你的结构。例如,哈希值总是3级深,并且哈希值在3级被删减吗?

    您可以从以下内容开始:

    h.each{|k1,v1| v1.each{|k2, v2| v2.delete_if{|k3,v3| k3 != :a}}}
    
        2
  •  1
  •   Mike Woodhouse    16 年前

    (应该是一个注释,但是代码很难这样理解)

    如果要从最里面的散列中删除除:a之外的所有键,为什么不将该散列的值部分直接赋给包含它的散列呢?

    result = {
      1 => { 1 => "x", 2 => "xx"}, 
      2 => { 1 => "p", 2 => "pp"}
    }
    
    推荐文章