arrays - Ruby 的组合比较运算符是如何工作的?
问题描述
关于stackoverflow的第一个问题:)
我正在学习 Codecademy 的 Ruby 课程,但我遇到了一些问题。
fruits = ["orange", "apple", "banana", "pear", "grapes"]
fruits.sort! {|first, second| second <=> first}
print fruits
我不知道如何表达这个问题。在 Codecademy 上,任务是设置要在控制台上反向显示的数组。经过一番研究,我能够弄清楚。我了解它的工作原理以及将其放入代码中的顺序而不是为什么。我知道“<=>”比较两个对象,但是当我们不这样声明它们时,数组中的项目如何成为对象?
其次,当我们可以这样做时,以这种方式编写这段代码的目的是什么fruits.sort.reverse
?
解决方案
第一个问题:在其操作的各个点,该sort
方法必须比较成对的对象以查看它们的相对顺序应该是什么。它通过应用您传递给 的块来进行比较sort
,即{|first, second| second <=> first}
. 不确定“当我们不这样声明数组中的项目时,它们如何成为对象?”是什么意思。ruby 中的所有数据都是一个对象,因此鉴于所有变量都是对象引用,因此不需要声明或转换。
第二个问题:是的,您可以这样做fruits.sort.reverse
,但这需要在排序之后进行额外的工作才能进行反向操作。此外,reverse
无法处理更复杂的排序任务,例如按性别和姓氏或头发颜色、身高和体重等多个标准对人员进行排序。编写自己的比较器可以处理相当复杂的排序。
推荐阅读
- visual-studio - 在解决方案中更改 .vb 文件的文件路径 - 连接的东西
- amazon-web-services - 将 Nginx 块隐蔽到 AWS ALB
- node.js - 在 puppeteer 中存储浏览器页面
- mongodb - MongoDB 聚合:如何将刻度转换为日期?
- python - 加载音频文件并找到频率
- ios - WKWebView 在旧项目中显示内容错误的框架
- sql - 从源表中的值列表中识别具有最高值的 FK
- amazon-web-services - 为 dynamoDB 的小对象计算 RCU
- r - 以列名作为索引的“For”循环
- c# - Unity 究竟是如何实现 Vector3.Slerp 的?