ブール値に基づいてSwift配列をソートする方法を探しています。
NSArrayへのキャストを使用して動作しています:
var boolSort = NSSortDescriptor(key: "selected", ascending: false)
var array = NSArray(array: results)
return array.sortedArrayUsingDescriptors([boolSort]) as! [VDLProfile]
しかし、私はSwiftバリアント、何かアイデアを探していますか?
更新 Arkkuのおかげで、次のコードを使用してこれを修正できました。
return results.sorted({ (leftProfile, rightProfile) -> Bool in
return leftProfile.selected == true && rightProfile.selected != true
})
Swiftの配列は、sort
を使用して、またはsorted
を使用して新しい配列にソートできます。いずれかの関数の単一パラメーターは、2つの要素を取り、最初の要素が2番目の要素の前に順序付けられている場合にtrue
を返すクロージャーです。クロージャーのパラメーターを使用する最短の方法は、それらを$0
および$1
として参照することです。
例(最初に真のブール値をソートする):
// In-place:
array.sort { $0.selected && !$1.selected }
// To a new array:
array.sorted { $0.selected && !$1.selected }
(編集:Swift 3および4、以前はsort
はsortInPlace
で、sorted
はsort
でした。)
New(for Swift 1.2)
return results.sort { $0.selected && !$1.selected }
Old(for Swift 1.0)
results
のタイプは[VDLProfile]
およびVDLProfileにはBool
メンバーselected
があります。
return results.sorted { $0.selected < $1.selected }
sorted のドキュメントを参照してください
Swiftの標準ライブラリには、ユーザーが提供する並べ替えクロージャーの出力に基づいて、既知の型の値の配列を並べ替えるsortという関数があります。
reversed = sorted(array) { $0 > $1 }
reversed
は、クロージャーで指定された条件に従ってソートされる新しい配列になります。