"排序"和"排序"之间有什么区别!红宝石的方法?

Fab*_*bio 2 ruby sorting ruby-on-rails

来自Ruby的官方文档:

sort →new_ary sort {| a,b | block}→new_ary返回通过排序self创建的新数组.

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

该块必须实现a和b之间的比较,并且当a跟随b时返回-1,当a和b相等时返回-1,如果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"]
Run Code Online (Sandbox Code Playgroud)

分类!→ary单击以切换源排序!{| a,b | block}→ary将自我排序到位.

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

该块必须实现a和b之间的比较,并且当a跟随b时返回-1,当a和b相等时返回-1,如果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"]
Run Code Online (Sandbox Code Playgroud)

结果看起来是一样的,那有什么区别?

Ami*_*ait 10

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]
Run Code Online (Sandbox Code Playgroud)

在哪里

a = [4,3,2,5,1]
a.sort! # => [1,2,3,4,5]
a is now [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)