【问题标题】:Can someone explain how this code sorts in ascending order?有人能解释一下这段代码是如何按升序排序的吗?
【发布时间】:2015-04-27 14:05:02
【问题描述】:

它以升序返回数组/列表,但它是如何工作的?

books = ["Charlie and the Chocolate Factory", "War and Peace", "Utopia", "A Brief History of Time", "A Wrinkle in Time"]

books.sort! { |firstBook, secondBook| firstBook <=> secondBook }

【问题讨论】:

标签: ruby arrays function sorting


【解决方案1】:

这是一个很好的问题,答案很简单。该块调用宇宙飞船操作员:&lt;=&gt;。许多物体都会响应它。它返回 -1、0 或 1,具体取决于一个对象是否比另一个对象“更大”。

这是字符串的工作原理:

Comparison - 根据字符串是否为 小于、等于或大于 other_string。

如果字符串的长度不同,并且字符串相等 当与最短长度比较时,较长的字符串是 被认为大于较短的。

如果你有一个不响应宇宙飞船操作符的对象(比如你自己的对象),那么你可以自己定义它。

Ruby Docs

【讨论】:

  • 我怀疑这是对“排序如何工作”问题的回答。
  • 我不认为问题是“排序是如何工作的”。我认为更多的是解释块或宇宙飞船操作符。
  • 我想知道“THIS”代码是如何对数组进行排序的?
【解决方案2】:

Enumerable#sortuses众所周知的Quicksort算法。

Ruby 默认快速排序实现正在调用您在块 (firstBook &lt;=&gt; secondBook) 中提供的比较回调。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多