【问题标题】:Spliting hash key containing of arrays to another keys将包含数组的哈希键拆分为另一个键
【发布时间】:2016-11-04 15:14:07
【问题描述】:

我的 ruby​​ 脚本有问题。我不知道如何转换哈希

g = { ["name1", "name2"] => [{ "email" => "adam@adam.pl" }], 
      ["name3", "name4"] => [{ "email" => "ewa@ewa.pl" }], 
      ["name5", "name6", "name7", "name8"] => [{ "email" => "ala@ala.pl" }] }

散列:

x = { "name1" => [{ "email" => "adam@adam.pl" }],
      "name2" => [{ "email" => "adam@adam.pl" }],
      "name3" => [{ "email" => "ewa@ewa.pl" }],
      "name4" => [{ "email" => "ewa@ewa.pl" }],
      "name5" => [{ "email" => "ala@ala.pl" }],
      "name6" => [{ "email" => "ala@ala.pl" }],
      "name7" => [{ "email" => "ala@ala.pl" }],
      "name8" => [{ "email" => "ala@ala.pl" }] }

我需要拆分密钥,例如["name1", "name2"] 并将它们作为其值 "name1" => [{ "email" => "adam@adam.pl" }], "name2" => [{ "email" => "adam@adam.pl" }] 的键。

你能帮我解决这个问题吗?

【问题讨论】:

  • 你试过了吗?
  • 是的,我尝试通过元素的数量来拆分键的数组,但我不知道如何将值作为所有新键的值。

标签: arrays ruby hash key


【解决方案1】:

这是你可以尝试类似的东西来获得类似的结果

h = Hash[*g.map { |keys, value| keys.map {|key| [key,value]} }.flatten]

这给了我们一个哈希

{ "name1" => { "email" => "adam@adam.pl" },
  "name2" => { "email" => "adam@adam.pl" },
  "name3" => { "email" => "ewa@ewa.pl" },
  "name4" => { "email" => "ewa@ewa.pl" },
  "name5" => { "email" => "ala@ala.pl" },
  "name6" => { "email" => "ala@ala.pl" },
  "name7" => { "email" => "ala@ala.pl" },
  "name8" => { "email" => "ala@ala.pl" } } 

上面的值也是散列格式,不在数组中。如果不需要,那么这可以为您工作

【讨论】:

    【解决方案2】:

    试试这个:

    g.each_with_object({}) do |(k, v), obj|
      k.each { |e| obj[e] = v }
    end
    

    与其他解决方案的性能比较:

    #                                           user     system      total        real
    # each_with_object...
    # separate_keys1(1_000_000 times):      9.765000   0.000000   9.765000 (  9.908535)
    # Hash[]...
    # separate_keys2(1_000_000 times):     16.505000   0.016000  16.521000 ( 16.725911)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多