3

来自 Ruby 的官方文档:

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

排序比较将使用 <=> 运算符或使用可选代码块完成。

该块必须实现 a 和 b 之间的比较,并且当 a 跟随 b 时返回 -1,当 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| block } → ary 对自身进行排序。

排序比较将使用 <=> 运算符或使用可选代码块完成。

该块必须实现 a 和 b 之间的比较,并且当 a 跟随 b 时返回 -1,当 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"]

结果似乎相同,那么有什么区别?

4

3 回答 3

11

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]
于 2013-10-31T09:29:02.823 回答
0

在铁轨上!用于应用更改和更新其调用对象的方式

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

于 2013-10-31T10:20:45.343 回答
0
'!' 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.
于 2013-10-31T10:35:43.547 回答