Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将两个数组合并为哈希时保留重复键的键值对_Ruby - Fatal编程技术网

Ruby 将两个数组合并为哈希时保留重复键的键值对

Ruby 将两个数组合并为哈希时保留重复键的键值对,ruby,Ruby,我在ruby中有两个数组: array_one = ["farmer_joe", "farmer_judy", "farmer_crazy_eyes", "farmer_joe"] array_two = ["pigs", "chickens", "elephants", "cows"] 如果我使用zip函数,我会丢失重复值,Farmer Joe的密钥对 hash_one = Hash[array_one.zip array_two] => {"farmer_joe"=>"c

我在ruby中有两个数组:

array_one = ["farmer_joe", "farmer_judy", "farmer_crazy_eyes", "farmer_joe"]

array_two = ["pigs", "chickens", "elephants", "cows"]
如果我使用zip函数,我会丢失重复值,Farmer Joe的密钥对

hash_one = Hash[array_one.zip array_two] 

=> {"farmer_joe"=>"cows", "farmer_judy"=>"chickens", "farmer_crazy_eyes"=>"elephants"}
理想情况下,我想要一个函数,它允许我用一个漂亮的ruby风格的单线方法来克服这个问题。也许类似这样的东西会合并重复的键并将它们的值添加到数组中

hash_one = Hash[array_one.super_special_zip array_two]

=> {"farmer_joe"=>["pigs","cows"], "farmer_judy"=>["chickens"], "farmer_crazy_eyes"=>["elephants"]}

有没有这样的
super\u-special\u-zip
方法?或者说这是傻瓜的差事,有什么好的理由吗?

有三种标准的方法

a1 = ["farmer_joe", "farmer_judy", "farmer_crazy_eyes", "farmer_joe"]
a2 = ["pigs", "chickens", "elephants", "cows"]
pairs = a1.zip(a2) # or [a1,a2].transpose
  #=> [["farmer_joe", "pigs"], ["farmer_judy", "chickens"],
  #    ["farmer_crazy_eyes", "elephants"], ["farmer_joe", "cows"]]
1。用于创建默认值为空数组的哈希

pairs.each_with_object(Hash.new { |h,k| h[k]=[] }) { |(f,l),h| h[f] << l }
  # => {"farmer_joe"=>["pigs", "cows"], "farmer_judy"=>["chickens"],
  #     "farmer_crazy_eyes"=>["elephants"]}
3。使用

除了最后两行,还有许多其他选择,其中一行是:

h.merge(h) { |*_,v| v.map(&:last) }

有三种标准方法可以做到这一点

a1 = ["farmer_joe", "farmer_judy", "farmer_crazy_eyes", "farmer_joe"]
a2 = ["pigs", "chickens", "elephants", "cows"]
pairs = a1.zip(a2) # or [a1,a2].transpose
  #=> [["farmer_joe", "pigs"], ["farmer_judy", "chickens"],
  #    ["farmer_crazy_eyes", "elephants"], ["farmer_joe", "cows"]]
1。用于创建默认值为空数组的哈希

pairs.each_with_object(Hash.new { |h,k| h[k]=[] }) { |(f,l),h| h[f] << l }
  # => {"farmer_joe"=>["pigs", "cows"], "farmer_judy"=>["chickens"],
  #     "farmer_crazy_eyes"=>["elephants"]}
3。使用

除了最后两行,还有许多其他选择,其中一行是:

h.merge(h) { |*_,v| v.map(&:last) }
一种方法

array_one = ["farmer_joe", "farmer_judy", "farmer_crazy_eyes", "farmer_joe"]
array_two = ["pigs", "chickens", "elephants", "cows"]

hash_one = {}

array_one.each_with_index do |farmer,i|
    if hash_one.has_key?(farmer)
        hash_one[farmer] << array_two[i]
    else
        hash_one[farmer] = [array_two[i]]
    end
end

hash_one # => {"farmer_joe"=>["pigs", "cows"], "farmer_judy"=>["chickens"], "farmer_crazy_eyes"=>["elephants"]}
array\u one=[“farmer\u joe”、“farmer\u judy”、“farmer\u疯狂的眼睛”、“farmer\u joe”]
数组_two=[“猪”、“鸡”、“大象”、“牛”]
hash_one={}
数组_one.每个_带有_索引do | farmer,i|
如果散列一个。有密钥吗?(农民)
一个[农夫]{“农夫乔”=>[“猪”、“牛”],“农夫朱迪”=>[“鸡”],“农夫疯狂的眼睛”=>[“大象”]}
一种方法

array_one = ["farmer_joe", "farmer_judy", "farmer_crazy_eyes", "farmer_joe"]
array_two = ["pigs", "chickens", "elephants", "cows"]

hash_one = {}

array_one.each_with_index do |farmer,i|
    if hash_one.has_key?(farmer)
        hash_one[farmer] << array_two[i]
    else
        hash_one[farmer] = [array_two[i]]
    end
end

hash_one # => {"farmer_joe"=>["pigs", "cows"], "farmer_judy"=>["chickens"], "farmer_crazy_eyes"=>["elephants"]}
array\u one=[“farmer\u joe”、“farmer\u judy”、“farmer\u疯狂的眼睛”、“farmer\u joe”]
数组_two=[“猪”、“鸡”、“大象”、“牛”]
hash_one={}
数组_one.每个_带有_索引do | farmer,i|
如果散列一个。有密钥吗?(农民)
一个[农夫]{“农夫乔”=>[“猪”、“牛”],“农夫朱迪”=>[“鸡”],“农夫疯狂的眼睛”=>[“大象”]}

另一种方法是(无导轨)


另一种方法是(无导轨)


array\u one.zip array\u two
不会丢失重复项,将结果转换为散列。
array\u one.zip array\u two
不会丢失重复项,将结果转换为散列。与上面类似,我想说这更清楚一些,但我喜欢Cary的一行。如果我不能得到一个神奇的内置
super\u special\u zip
方法,上述方法可能会很好地工作。非常感谢你的贡献!类似于上面,我想说这是一个更清楚,但我喜欢卡里的一行。如果我不能得到一个神奇的内置
super\u special\u zip
方法,上述方法可能会很好地工作。非常感谢你的贡献!