Sort hash by key, return hash in Ruby

前端 未结 10 1435
时光取名叫无心
时光取名叫无心 2020-11-27 10:05

Would this be the best way to sort a hash and return Hash object (instead of Array):

h = {\"a\"=>1, \"c\"=>3, \"b\"=>2, \"d\"=>4}
# => {\"a\"=         


        
10条回答
  •  爱一瞬间的悲伤
    2020-11-27 10:39

    Note: Ruby >= 1.9.2 has an order-preserving hash: the order keys are inserted will be the order they are enumerated. The below applies to older versions or to backward-compatible code.

    There is no concept of a sorted hash. So no, what you're doing isn't right.

    If you want it sorted for display, return a string:

    "{" + h.sort.map{|k,v| "#{k.inspect}=>#{v.inspect}"}.join(", ") + "}"
    

    or, if you want the keys in order:

    h.keys.sort
    

    or, if you want to access the elements in order:

    h.sort.map do |key,value|
      # keys will arrive in order to this block, with their associated value.
    end
    

    but in summary, it makes no sense to talk about a sorted hash. From the docs, "The order in which you traverse a hash by either key or value may seem arbitrary, and will generally not be in the insertion order." So inserting keys in a specific order into the hash won't help.

提交回复
热议问题