【问题标题】:how can I simply merge a hash into a new one?我怎样才能简单地将哈希合并到一个新的?
【发布时间】:2023-03-19 15:51:01
【问题描述】:
I have a simple hash like so { "1234" => "5", "2345" => "6" }

如何创建一个包含键和值的新哈希?像这样:

{ key_id = "1234", value_id = "5" }, { key_id = "2345", value_id = "6" }

【问题讨论】:

  • 可能是 SugarCRM 的一些 WSDL 接口,amirite?

标签: ruby-on-rails ruby arrays hash


【解决方案1】:

您实际上想达到什么目的?如果您希望遍历所有键,可以使用 .keys:

h = { "1234" => "5", "2345" => "6" }
h.keys
=> ["1234", "2345"]

如果你只想创建一个哈希数组,你应该能够遍历键:

h = { "1234" => "5", "2345" => "6" }
a = []

h.each {|k, v| a << {:key_id => k, :value_id => v}

【讨论】:

    【解决方案2】:

    通过“合并”两个散列,我认为您的意思是将两个不同散列的所有内容放入一个新散列中。因为哈希的键必须是唯一的,如果相同的键存在于两个源哈希中,则只有一个值可以存在。

    在这个例子中,我将哈希 x 和哈希 y 的内容合并到哈希 z 中。如果有任何重复的键,y 中的值将覆盖 z 中的值。

    x = { "a" => "1","b" => "2","c" => "3" }
    y = { "c" => "999","d" => "4","e" => "5" }
    z = {}
    
    x.each do |key,value|
      z[key] = value
    end
    
    y.each do |key,value|
      z[key] = value
    end
    

    源哈希总共有 6 个键。因为键“c”在两个哈希中,合并后的哈希只有 5 个键。

    => {"a"=>"1", "b"=>"2", "c"=>"999", "d"=>"4", "e"=>"5"}
    

    【讨论】:

      【解决方案3】:

      您可以遍历每对原始哈希并建立一个哈希数组:

      hashes = []
      { "1234" => "5", "2345" => "6" }.each_pair {|key, value| hashes << { :key_id => key, :value_id => value } }
      

      将产生:

      [{:key_id=>"2345", :value_id=>"6"}, {:key_id=>"1234", :value_id=>"5"}]
      

      【讨论】:

        【解决方案4】:

        派生哈希的密钥应该是什么,与原始哈希相同?在这种情况下,使用这个 sn-p:

        x = { "1234" => "5", "2345" => "6" }
        y = {}
        
        x.each do |key, value|
            y[key] = { "key_id" => key, "value_id" => value }
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          • 2020-12-01
          • 2022-01-11
          • 1970-01-01
          • 2019-02-09
          • 1970-01-01
          相关资源
          最近更新 更多