アルゴリズム


Swift 標準ライブラリは、並べ替え、検索、など多くの事を含む、一般的なタスクを支援するために様々なアルゴリズムを含んでいます。


今後さらに詳しい情報があるでしょう。


並べ替え


sort(_:)


比較可能な要素の配列を所定の位置に並べ替えます。


宣言


func sort<T: Comparable>(inout array: [T])



議論


Comparable(比較可能) プロトコルへの準拠で必要となる < 演算子を使用して所定の位置に、変更可能な配列を並び替えるために、この関数を使用して下さい。配列内のすべての要素は、Comparable(比較可能) プロトコルに準拠する型でなければならず、< 演算子は要素を順序付けて厳密に weak と定義されなければなりません。


  1. var array = [5, 1, 6, 4, 2, 3]
  2. sort(&array)
  3. // array is [1, 2, 3, 4, 5, 6]


var キーワードを使って (つまり、変数に) 配列を宣言した時にのみこの関数を使用できます。


  1. let constantArray = [5, 1, 6, 4, 2, 3]
  2. sort(&constantArray)
  3. // Fatal Error: cannot mutate a constant array


並べ替えアルゴリズムは、安定しておらず、そのため等しいものを比較する要素の相対的な順序を変更することができます。




sort(_:_:)


指定されたクロージャに応じて所定の位置に要素からなる配列を並べ替えます。


宣言


func sort<T>(inout array: [T], isOrderedBefore: (T, T) -> Bool)



議論


クロージャを使用して、所定の場所に要素の変更可能な配列を並べ替えるために、この関数を使用して下さい。クロージャは、2つの項目が昇順 (true) か、降順か (false) どうかを示すために、ブール値を返す必要があります。


  1. var array = [5, 1, 3, 4, 2, 6]
  2. sort(&array) { $0 > $1 }
  3. // array is [6, 5, 4, 3, 2, 1]


var キーワードを使って (つまり、変数として) 配列を宣言した時にのみこの関数を使用できます。


  1. let constantArray = [5, 1, 6, 4, 2, 3]
  2. sort(&constantArray) { $0 > $1 }
  3. // Fatal Error: cannot mutate a constant array


isOrderedBefore クロージャは配列内の要素を順序付けて厳密に weak と定義する必要があります。


並べ替えアルゴリズムは安定しておらず、このため isOrderedBefore が順序を確立しない内は要素の相対的な順序を変更することができます。



sorted(_:)


シーケンス (配列) の並べ替えられた要素を含む配列を返します。


宣言


func sorted<C: SequenceType where C.Generator.Element: Comparable>(source: C) -> [C.Generator.Element]



議論


Comparable(比較可能) プロトコルへの準拠が必要とする < 演算子を使用してシーケンス (配列) を並べ替えるためにこの関数を使用して下さい。 source 内のすべての要素は、 Comparable(比較可能) プロトコルに準拠し、< 演算子は要素を順序付けて厳密に weak と定義されなければなりません。


  1. let array = [5, 1, 6, 4, 2, 3]
  2. let result = sorted(array)
  3. // result is [1, 2, 3, 4, 5, 6]


並べ替えアルゴリズムは、安定しておらず、そのため等しいものを比較する要素の相対的な順序を変更することができます。




sorted(_:_:)


指定されたクロージャに従ってシーケンス (配列) の並べ替えられた要素を含む配列を返します。


宣言


func sorted<C: SequenceType>(source: C, isOrderedBefore: (C.Generator.Element, C.Generator.Element) -> Bool) -> [C.Generator.Element]



議論


クロージャを使用してシーケンス (配列) を並べ替えるために、この関数を使用して下さい。クロージャは、2つの項目が昇順 (true) か降順 (false) かを示す、ブール値を返す必要があります。


  1. let array = [5, 1, 3, 4, 2, 6]
  2. let result = sorted(array) { $0 > $1 }
  3. // result is [6, 5, 4, 3, 2, 1]


isOrderedBefore クロージャは配列内の要素を順序付けで厳密に weak と定義する必要があります。


並べ替えアルゴリズムは安定しておらず、 isOrderedBefore が順序を確立しないため、要素の相対的な順序を変更することができます。




検索


find(_:_:)


与えられた値が指定されたコレクションの中に表れる最初のインデックスを検索しようとした結果を含む optonal のインデックスを返します。


宣言


func find<C: CollectionType where C.Generator.Element: Equatable>(domain: C, value: C.Generator.Element) -> C.Index?



議論


指定された値がコレクションの中に表れる最初のインデックスを検索するには、この関数を使用して下さい。関数は、optional のインデックス値 (C.Index?) を返します - もし指定された値が見つからない場合は、返されたインデックス値は nil になります。コレクション内のすべての要素は、 Equatable(同等視) プロトコルに準拠する型のものでなければなりません。


  1. let array = [5, 1, 6, 4, 2, 3]
  2. let valueToFind = 6
  3. if let index = find(array4, valueToFind) {
  4.         println("Found the value \(valueToFind) at index \(index).")
  5. } else {
  6.         println("Couldn't find the value \(valueToFind) in the array.")
  7. }
  8. // prints "Found the value 6 at index 2."


訳注: このプログラムリストの3行目は当然 if let index = find(array,valueToFind){ と思われれます。上記のまま入力しても動きません。 typo だと思いますが、そのままの形で残しました。





前:印刷


次:マニュアル変更履歴