“排序”和“排序”有啥区别!红宝石中的方法? [复制]

Posted

技术标签:

【中文标题】“排序”和“排序”有啥区别!红宝石中的方法? [复制]【英文标题】:What is the difference between the "sort" and "sort!" method in ruby? [duplicate]“排序”和“排序”有什么区别!红宝石中的方法? [复制] 【发布时间】:2013-11-11 05:30:57 【问题描述】:

来自 Ruby 的官方文档:

排序 → new_ary sort |a, b| block → new_ary 返回一个新数组 通过自我排序创建。

排序的比较将使用 运算符或使用 一个可选的代码块。

该块必须实现a和b之间的比较,并返回-1, 当 a 跟在 b 之后,当 a 和 b 相等时为 0,如果 b 跟在 a 之后,则 +1。

另请参见 Enumerable#sort_by。

a = [ "d", "a", "e", "c", "b" ]
a.sort                    #=> ["a", "b", "c", "d", "e"]
a.sort  |x,y| y <=> x   #=> ["e", "d", "c", "b", "a"]

排序! → ary 点击切换源排序! |a, b|块 → ary 排序 自我到位。

排序的比较将使用 运算符或使用 一个可选的代码块。

该块必须实现a和b之间的比较,并返回-1, 当 a 跟在 b 之后,当 a 和 b 相等时为 0,如果 b 跟在 a 之后,则 +1。

另请参见 Enumerable#sort_by。

a = [ "d", "a", "e", "c", "b" ]
a.sort!                    #=> ["a", "b", "c", "d", "e"]
a.sort!  |x,y| y <=> x   #=> ["e", "d", "c", "b", "a"]

结果好像一样,那有什么区别呢?

【问题讨论】:

sort 返回一个通过排序self创建的新数组sort! 对self进行排序,它写在你发布的文档中... 是的,尼尔,这可能是该问题的重复。我没有意识到这一点,因为我是 Ruby 的新手。对不起。假设我这次是无辜的:) 这是来自接近投票的自动消息。完全没有问题,大多数封闭式问题都是真诚地提出的。但是 SO 的正确结果是这个问题应该被关闭,除非它可能由于问题和答案的措辞引起了每个人的想象,然后获得了足够的选票,它成为问题的 最佳版本。 是的,我同意。感谢您对 SO 的贡献。 【参考方案1】:

sort 不会修改原始数组,而sort! 会 ('!' 是 ruby​​ 中的 bang 方法,它将替换现有值) 例如:

a = [4,3,2,5,1] 
a.sort # => [1,2,3,4,5] 
a is still [4,3,2,5,1]

在哪里

a = [4,3,2,5,1]
a.sort! # => [1,2,3,4,5]
a is now [1,2,3,4,5]

【讨论】:

【参考方案2】:

在轨道上!用于应用更改并更新其调用对象的方法

a.sort 只会返回排序后的数组,但会返回 a.sort!将返回排序后的数组并将新的排序结果保存在变量中。

【讨论】:

【参考方案3】:
'!' is the bang method in ruby, it will replace the existing value 


ex: .sort is a normal sorting method in ruby
    .sort! its a bang method in ruby its override the existing value.

【讨论】:

以上是关于“排序”和“排序”有啥区别!红宝石中的方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在线排序算法和外部排序算法有啥区别?

java中 List 与Set 有啥区别?

列表、排序列表和数组列表之间有啥区别? (C#)

内置 qsort 函数和稳定排序函数有啥区别?

SQL里面的排序语句desc和ASC有啥区别

在嵌入式红宝石中排序