这是将哈希表排序并返回哈希对象(而不是数组)的最佳方法吗:
h = {"a"=>1, "c"=>3, "b"=>2, "d"=>4}
# => {"a"=>1, "c"=>3, "b"=>2, "d"=>4}
Hash[h.sort]
# => {"a"=>1, "b"=>2, "c"=>3, "d"=>4}
我借鉴了Boris Stitnicky的启发式解决方案,将一个原地sort!
方法打补丁到Hash
中:
def sort!
keys.sort!.each { |k| store k, delete(k) }
self
end
我喜欢早期帖子中的解决方案。
我创建了一个小类,称之为class AlphabeticalHash
。它还有一个名为ap
的方法,接受一个参数Hash
作为输入:ap variable
。类似于pp(pp variable
)
但它将(尝试并)按字母顺序列出(其键)。不知道是否有其他人想使用它,它作为gem可用,您可以这样安装它:gem install alphabetical_hash
对我来说,这已经足够简单了。如果其他人需要更多功能,请告诉我,我会将其包含在gem中。
编辑:感谢Peter给了我这个想法。 :)
each
或each_pair
来迭代哈希表,否则我不确定对哈希表进行排序是否有太多优势。即使在这种情况下,我可能仍然会获取键,对其进行排序,然后迭代键并根据需要获取相应的值。这样可以确保代码在旧版本的Ruby上正确运行。 - the Tin Man