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

从该数组创建哈希[已关闭]

  •  -6
  • Rajagopalan  · 技术社区  · 6 年前

    [["DataSetId", "DataSet-1", "DataSet-1"], ["Did", "DataSet-1", "DataSet-2"], ["Company Name", "Company1", "Company2"]]
    

    我想要一个如下所示的散列数组

    [{"DataSetId"=>"DataSet-1","Did"=>"DataSet-1","Company Name"=>"Company1"},{"DataSetId"=>"DataSet-1","Did"=>"DataSet-2","Company Name"=>"Company2"}]
    

    "Did" 这些值是 "DataSet-1", "DataSet-2" .

    这里有三个元素的数组是动态的,其中包括更多的元素,如[“Did”、“DataSet-1”、“DataSet-2”、“DataSet-3”、“DataSet-4”],这将在运行时决定。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Aleksei Matiushkin    6 年前
    hash.
      map { |a| [a.first].product(a[1..-1]) }.
      reduce(&:zip).
      map { |a| a.flatten.each_slice(2).each_with_object({}) { |(k, v), h| h[k] = v } }
    #⇒ [{"DataSetId"=>"DataSet-1", "Did"=>"DataSet-1", "Company Name"=>"Company1"},
    #   {"DataSetId"=>"DataSet-1", "Did"=>"DataSet-2", "Company Name"=>"Company2"}]
    

    我很确定最后一次转换可能会以更优雅的方式完成,但我不知道如何完成。

    UPD

    hash.
      map { |a| [a.first].product(a[1..-1]) }.
      reduce(&:zip).
      map { |a| Hash[*a.flatten] }