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

我需要用h`ash中的值替换数组中的散列键

  •  1
  • Rajagopalan  · 技术社区  · 7 年前

    我有一个这样的数组

    arr = [["ContactCreate", "Test1"], [nil, nil], ["ROW1", "one"], 
           ["ROW2", "four"], ["ROW3", "seven"], ["ROW4", "Ten"],
           ["ROW5", "thirteen"]]
    

    像这样的杂烩

    h = {"ROW1"=>["id=xxx", "TypeAndWait"], "ROW2"=>["id=xxx", "TypeAndWait"],
         "ROW3"=>["id=yyy", "Select"], "ROW4"=>["id=zzz", "SelectAndWait"],
         "ROW5"=>["id=aaa", "Check"]}
    

    我想用它的散列值替换每个子数组的第一个元素,前提是它是一个散列键。结果数组应如下所示。

    [["ContactCreate", "Test1"], [nil, nil], [["id=xxx", "TypeAndWait"], "one"],
     [["id=xxx", "TypeAndWait"], "four"], [["id=yyy", "Select"], "seven"],
     [["id=zzz", "SelectAndWait"], "Ten"], [["id=aaa", "Check"], "thirteen"]]
    

    例如, "ROW1" h["ROW1"] .

    有什么简单的方法可以做到这一点吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Marcin Kołodziej    7 年前

    这应该管用( arr h 是你的哈希)

    arr.map do |x, y|
      [h[x] || x, y]
    end
    
        2
  •  1
  •   Cary Swoveland    7 年前
    h.default_proc = Proc.new { |h,k| k }
    arr.map { |e1,e2| [h[e1], e2] }
    

    arr = [["ContactCreate", "Test1", "Test2"], ["ROW1", nil], [1, "ROW2", "four"]]
    
    arr.map { |a| a.map { |e| h[e] } }
      #=> [["ContactCreate", "Test1", "Test2"], [["id=xxx", "TypeAndWait"], nil],
      #    [1, ["id=xxx", "TypeAndWait"], "four"]]
    

    默认过程只会导致 h[k] k h 没有钥匙 k . 看到了吗 Hash#default_proc= .

    如果不想修改 h.dup 用dup代替 .

    推荐文章