class Hash

Enumerable#zip is nonsense when applied to Hashes

Public Instance Methods

zip(*args) { |key, *map{|source| source}| ... } click to toggle source
# File lib/hash-zip.rb, line 3
def zip(*args)
  sources = [self]
  args.each do |arg|
    if arg.is_a?(Hash)
      sources << arg
    else
      sources << arg.to_h
    end
  end
  output_keys = sources.flat_map(&:keys).uniq
  if block_given?
    output_keys.each do |key|
      yield(key, *sources.map{|source| source[key]})
    end
    nil
  else
    result = {}
    output_keys.each do |key|
      result[key] = sources.map{|source| source[key]}
    end
    result
  end
end