按键排序哈希,在Ruby中返回哈希

304

这是将哈希表排序并返回哈希对象(而不是数组)的最佳方法吗:

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}

9
除非您使用eacheach_pair来迭代哈希表,否则我不确定对哈希表进行排序是否有太多优势。即使在这种情况下,我可能仍然会获取键,对其进行排序,然后迭代键并根据需要获取相应的值。这样可以确保代码在旧版本的Ruby上正确运行。 - the Tin Man
是的,我发现您的Hash[h.sort]处理过程比对键进行排序,然后通过排序后的键再次访问哈希表更有效。 - Douglas
"什么是最快的哈希排序方式?将会很有用。" - the Tin Man
6
你已经有几年时间考虑你的解决方案了,现在你准备好接受答案了吗?;-) - Mark Thomas
已经过去了11年,现在让我们接受一个解决方案吧 :P - mlabarca
显示剩余2条评论
12个回答

-1

我借鉴了Boris Stitnicky的启发式解决方案,将一个原地sort!方法打补丁到Hash中:

def sort!
  keys.sort!.each { |k| store k, delete(k) }
  self
end

-2

我喜欢早期帖子中的解决方案。

我创建了一个小类,称之为class AlphabeticalHash。它还有一个名为ap的方法,接受一个参数Hash作为输入:ap variable。类似于pp(pp variable

但它将(尝试并)按字母顺序列出(其键)。不知道是否有其他人想使用它,它作为gem可用,您可以这样安装它:gem install alphabetical_hash

对我来说,这已经足够简单了。如果其他人需要更多功能,请告诉我,我会将其包含在gem中。

编辑:感谢Peter给了我这个想法。 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接