在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
?
答案 0 :(得分:1)
a
和b
都是[key, value]
的数组,来自Hash#sort
。
将hsh转换为[key,value]数组的嵌套数组,并使用Array#sort对其进行排序。
因此a[1]<=>b[1]
按值对结果对进行排序。如果是a[0]<=>b[0]
,它将按键进行排序。
答案 1 :(得分:1)
Ruby没有键值对或元组数据类型,因此所有 Hash
迭代方法(each
,map
,{{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将每个键/值对作为两个元素的数组传递到块中。