Ruby联合比较运算符<=>工作原理及相关排序使用疑问
问题1解答
Ruby是纯面向对象编程语言,所有值默认都是对象,不需要开发者额外显式声明类型。你代码数组中存储的字符串本身就是String类的实例,原生支持<=>比较运算符,默认会按字典序比较两个字符串的大小。
问题2解答
两种实现的核心差异如下:
- 性能不同:
fruits.sort.reverse的执行逻辑是先完成一次正序排序,再额外遍历一次数组做反转,总时间开销为「排序O(n log n) + 反转O(n)」;而直接给sort!传入反向比较块的写法,只需要执行一次反向排序,仅产生O(n log n)的排序开销,数据量较大时性能优势更明显。 - 对原数组的影响不同:你所用的
sort!是带感叹号的原地修改方法,执行后会直接修改原fruits数组的内容;而sort.reverse会先后生成两个新数组(sort生成正序新数组,reverse再生成反转后的新数组),不会改动原数组的内容。 - 扩展性不同:如果后续需要基于更复杂的规则排序(例如按字符串长度、自定义属性排序),直接在比较块中定义反向规则,比先按规则正序排序再反转逻辑更直观,也能避免多步操作带来的冗余。
内容的提问来源于stack exchange,提问作者Afif
相关产品推荐
相关产品推荐

