我可以对下面的散列进行排序:
h = {"a"=> 20, "b"=> 30 , "c" => 25}
通过使用这个:
h.sort { |a, b| b[1] <=> a[1] }
但是,我不明白这段代码为何或如何工作。 |a, b|
中a
和b
代表的值是什么,它们从何而来?
sort
方法的文档没有提及这些问题。
最佳答案
Hash
类从 Enumerable
继承其 sort
方法模块。可枚举状态的文档:
The
Enumerable
mixin provides collection classes with several traversal and searching methods, and with the ability to sort. The class must provide a methodeach
, which yields successive members of the collection.
因此,Enumerable
上的方法的实现依赖于 Enumerable
类的 each
方法被包含在其中。具体来说,它期望each
将产生该对象所代表的集合的成员。在这种情况下,Hash#each
的文档说:
each {| key, value | block } → hsh
Calls block once for each key in hsh, passing the key-value pair as parameters.
由于 Hash#each
为散列中的每个键值对生成 key, value
,Enumerable
中的方法假定 key, value
是底层哈希中的“集合成员”(从某种意义上说,它是)。因此,Enumerable#sort
为 a
生成 key, value
,为 生成不同的
,因为 key, value
bEnumerable#sort
在其实现中依赖于 Hash#each
产生的值。这就是您示例中 a
和 b
的来源。
关于ruby - 为什么我们可以在 block 中使用数组索引来在ruby中进行哈希排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32786723/