2016-09-30 8 views
0

"internal"配列を保持し、いくつかの便利なメソッドを提供するカスタムクラスを構築しました。入力された配列を迅速にソートする方法は?

class ArrayList<T> { 
    private var array : Array<T> 

    public init() { 
    array = Array<T>() 
    } 

    public func add(element : T) { 
    array.append(element) 
    } 

    public func size() -> Int { 
    return array.count 
    } 

    ... 
} 

これまでのところうまく動作します。
しかし、今は配列をソートするメソッドも必要です。私は既に持っていることは以下の通りです:

public func sort(comparator : ?) { 
    array = array.sort(comparator) 
} 

疑問符はパラメータの型を意味し、それは私の問題です:パラメータの型を持っている必要がありますか?私は@noescapeについて何かを読んでいます< >しかし、私はそれを動作させることはできません!
私はSwift 2.2を使用しています。

答えて

1

最も簡単な方法は、なぜだろう、あなたは

let arrayList = ArrayList<Int>() 
arrayList.add(5) 
arrayList.add(12) 
arrayList.add(10) 
arrayList.add(2) 

arrayList.sort { $0 < $1 } 

print(arrayList.array) // [2, 5, 10, 12] 
+1

このコードを使用することができます使用することは、標準の閉鎖

public func sort(comparator : (T, T) -> Bool) { array.sortInPlace(comparator) } 

あるとComparableプロトコル

class ArrayList<T : Comparable> 

にジェネリック型を制約TをComparableに制限すると、比較できない要素はソートできないという理由だけで「<' and'>」で編集しましたか? もしあれば、デフォルトのソート関数を提供するTが匹敵する場合にのみ適用される拡張を追加することができます。 – overactor

+0

私はちょうど質問に非常に簡単に答えて、*バイナリ演算子<...には適用できません。 – vadian

+0

これは、TがComparableである限り、制限なしで正常に動作します。そして、そうでなければ、 '<'を使ってそれを比較できるとは思ってはいけません。あなたはそれを他の方法と比較することができます。 – overactor

関連する問題