3

Rubyの公式ドキュメントから:

sort → new_ary sort { |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"]

選別!→ クリックしてソースの並べ替えを切り替えます! { |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
'!' 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 に答える
0

レールで!変更を適用し、その呼び出し元オブジェクトを更新するために使用されます

a.sort はソートされた配列のみを返しますが、a.sort! ソートされた配列を返し、新しいソート結果を変数に保存します。

于 2013-10-31T10:20:45.343 に答える