2017-04-20 10 views
1

私はここで何が起こっているのgrokkingていないよ。どのようにクロージャが要素をソートし、配列の最後に当たったときに範囲外のエラーをスローしないか?そしてなぜ私は$ 2を介して3番目のパラメータを使用できないのですか?クロージャは1つ以上のパラメータにどのようにアクセスしますか?

配列の組み込みメソッドがソートされていますか? (私はちょうど自分の質問に答えたが、私はまだいくつかのフィードバックを取得したいと思います。)

var numbers = [20, 19, 7, 12] 
let sortedNumbers = numbers.sorted{$1 > $0} 
print(sortedNumbers) 

[7, 12, 19, 20] 
+3

XcodeエディタでCommand-「sorted」をクリックすると、その定義方法(例を含む)が表示されます。 –

答えて

2

はい、sortedが内蔵されてスウィフト配列を生成します。要素タイプがComparableの場合、クロージャなしで処理できます。したがって、あなたのケースではクロージャーを省略して同じ結果を得ることができます。

ソートアルゴリズムは、要素のペアを一度に呼び出して順序を調べるため、2つのパラメータが必要です。

ソートアルゴリズムは一般に、最小のペアワイズ比較で配列の全体の順序を推論できるように設計されています(各要素を他の要素と比較する必要はありません。配列は最後まで)。 https://visualgo.net/en/sorting?slide=1

1

あなたがこのページに方法を使っている:それは(Element, Element) -> Boolの署名で閉鎖を取るhttps://developer.apple.com/reference/swift/array/2296815-sorted

​​

お知らせ

これは、あなたが(ソートアルゴリズムの可視化)を理解するのに役立つかもしれません。したがって、2つの要素を取り、最初の要素が2番目の要素の前に来るかどうかを示すBoolを返す関数を提供します。

この関数は自動的に配列の境界を処理し、有効な要素のみをクロージャに渡し、境界外のエラーはありません。

関連する問題