# File lib/map.rb, line 827
  def set(*args)
    case
      when args.empty?
        return []
      when args.size == 1 && args.first.is_a?(Hash)
        hash = args.shift
      else
        hash = {}
        value = args.pop
        key = Array(args).flatten
        hash[key] = value
    end

    strategy = hash.map{|skey, svalue| [Array(skey), svalue]}

    strategy.each do |skey, svalue|
      leaf_for(skey, :autovivify => true) do |leaf, k|
        Map.collection_set(leaf, k, svalue)
      end
    end

    self
  end