2013-10-31 86 views
1

从Ruby的官方文档:“排序”和“排序!”有什么区别?方法在红宝石?

排序→new_ary排序{| A,B |块}→new_ary返回通过排序创建的新数组 。

比较将使用< =>运算符或使用 可选代码块进行。

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

另请参阅可枚举#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"] 

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

比较将使用< =>运算符或使用 可选代码块进行。

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

另请参阅可枚举#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"] 

的结果似乎是相同的,所以有什么区别?

+0

'sort' **返回排序自创建一个新的数组**而'排序!'**排序到位自**,它是写您发布的文件... – toro2k

+0

是,尼尔在这是一个可能的重复问题。我不知道这一点,但因为我是Ruby的新手。抱歉。假设我这次是无辜的:) – Fabio

+0

这是来自近距离投票的自动化信息。完全没有问题,大多数封闭问题都是真诚地提出的。但是对于SO的正确结果是,这个问题应该被关闭,除非由于问答的措辞而引起每个人的想象力,然后得到足够的选票,它就成为了新问题的最佳版本。 –

回答

10

sort将不修改原始数组而sort!
(是在红宝石的爆炸方法,将取代现有的值“!”)
例如:

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] 
0

在铁轨!用于应用更改并更新其调用对象意味着

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

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.