Ruby 中的 Sort 与 Sort_by

Ruby 中的 Sort 与 Sort_by

Ruby 有两种不同的信息排序方法。虽然乍一看,甚至第一次使用,这些方法似乎相似,但每种方法都有一些差异。这两个选项都处理获取一组数据并重新组织它,使其以不同的顺序出现。通过这篇博客,我将讨论每种方法的主要区别,并展示和使用每种方法的示例。

.Sort 方法:

.sort 方法接受两个参数并将它们重新组织成不同的顺序。这适用于数字数组。如果有一组数字是 5,8,1,2,9,那么它将将该组重组为 9,8,5,2,1。

这是 .sort 方法的示例。您可以看到它需要一个数组,然后通过放置 .sort 来调用该方法。 |a, b|表示两个相邻的数字。下一步是 a.name <=> b.name。这将两个数字彼此相邻并进行比较。如果两个参数相等,它将给出一个'0',这不会改变顺序。如果 a 小于 b,那么它将减去 1,这会将第二个参数移低。如果 a 大于 b,那么它将加 1 并将第二个参数上移。它将通过此​​方法,直到每个选项都返回 0 并且没有其他位置可以移动参数。

在这里您可以看到数组 [1, 2, 3] 使用了 .sort 方法,它返回了 [3, 2, 1]。您可以看到使用这样的方法来简化数字数组的好处。但是,如果您有除数字以外的参数,则此 .sort 方法可能无法正常工作。为此,您将需要一种不同的方法。

.Sort_by 方法:

.sort_by 方法与 .sort 方法相似,因为它将接受两个参数并将它们重新组织成不同的顺序。但是,此方法使用不同的方式来组织材料。 .sort_by 允许您获取一个对象,并调用将映射到集合的方法。

在这里,您可以看到 sort_by 方法将采用的样式。此示例采用给定数组并按元素名称对其进行排序。这是另一个显示 .sort_by 结果的示例:

如您所见,它选择按对象大小对对象进行排序。这意味着最小的数组将在顶部,而最大的数组将被推到底部。这样可以更好地控制您想要排序的内容。仅使用 .sort 方法可能会以不同的方式对其进行排序,但是 .sort_by 方法允许您选择要排序的参数。

结论

.sort 和 .sort_by 在编写代码时都有它们的用途。在尝试使内容对消费者更具可读性时,需要重新组织许多事情。 .Sort 在尝试将数字列表重新排序为数字顺序或可能将字母或单词列表重新排序为字母顺序时最有用。 .sort_by 在尝试重新排序更复杂的元素时会更有帮助。这可以在尝试按长度对一组单词进行排序时使用,或者可能是按照特定顺序对名字和姓氏进行排序。

几个例子

这里再举几个例子,以便真正理解 .sort 和 .sort_by 之间的区别。

在这里,您可以看到 .sort_by 用于按 4 人的名字和姓氏进行组织。它首先将名字按字母顺序排列。然后,正如您所看到的,当两个人被命名为 John 时,它按姓氏组织,将 Beck 放在 Doe 之前。

这是一个使用 .sort 的示例,没有我们之前看到的相同结构。它仍然会按数字顺序对数组进行排序。

这是使用我们之前看到的样式的 .sort 示例。这是 .sort 的一个更复杂的用法,因为他们指定了他们希望如何对数组进行排序。这可以通过 .sort 方法完成,但 .sort_by 往往是一种更有效、更快捷的排序方式。

这是将 .reverse 添加到 sort 方法的示例。通常数字会从最小到最大排序,但是反向方法会切换以使第一个数字成为最大数字。这只能在数组上使用,因此并非所有可以排序的东西也可以反转。

来源

[

Ruby 的排序和排序方式 |混搭

每当我在编程环境中听到排序这个词时,我都会立即回想起我高中时代的情景。就像是…

mixandgo.com

](https://mixandgo.com/learn/ruby/sort)

https://github.com/fastruby/fast-ruby/blob/main/code/enumerable/sort-vs-sort_by.rb

[

排序方式

使用通过给定块映射枚举中的值生成的一组键进行排序。结果无法保证……

apidock.com

](https://apidock.com/ruby/Enumerable/sort_by)

https://webdevjeffus.github.io/blog/enumerable_methods.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/36844/49111609

posted @ 2022-09-16 09:49  哈哈哈来了啊啊啊  阅读(375)  评论(0编辑  收藏  举报