如何`哈希#排序{| a,b |阻止}`工作?

时间:2015-06-12 23:45:01

标签: ruby

在ruby-doc中我看到了这个例子:

h = { "a" => 20, "b" => 30, "c" => 10  }
h.sort {|a,b| a[1]<=>b[1]}   #=> [["c", 10], ["a", 20], ["b", 30]]

任何人都可以解释a[1]<=>b[1]的含义吗?我们在这里比较什么? a是否为关键值b?我们为什么要比较索引1

3 个答案:

答案 0 :(得分:1)

ab都是[key, value]的数组,来自Hash#sort

  

将hsh转换为[key,value]数组的嵌套数组,并使用Array#sort对其进行排序。

因此a[1]<=>b[1]对结果对进行排序。如果是a[0]<=>b[0],它将按进行排序。

答案 1 :(得分:1)

Ruby没有键值对或元组数据类型,因此所有 Hash迭代方法(eachmap,{{1 },select,...)将哈希条目表示为sort,其中包含两个元素Array。 (事实上​​,大多数方法甚至都没有在[key, value]中实现,它们是从Hash继承而来的,甚至对密钥和值都不了解。)

答案 2 :(得分:0)

默想:

h = { "a" => 20, "b" => 30, "c" => 10  }
h.sort { |a,b| # => {"a"=>20, "b"=>30, "c"=>10}
  a[1]<=>b[1]
}              # => [["c", 10], ["a", 20], ["b", 30]]

对于h中键/值对的每个循环,Ruby将每个键/值对作为两个元素的数组传递到块中。