Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dsmatter/SwiftSortUtils
Useful functions and extensions for sorting in Swift
https://github.com/dsmatter/SwiftSortUtils
Last synced: 5 days ago
JSON representation
Useful functions and extensions for sorting in Swift
- Host: GitHub
- URL: https://github.com/dsmatter/SwiftSortUtils
- Owner: dsmatter
- License: mit
- Created: 2015-10-06T20:47:16.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2021-10-28T22:46:51.000Z (about 3 years ago)
- Last Synced: 2024-11-13T21:45:41.514Z (28 days ago)
- Language: Swift
- Size: 34.2 KB
- Stars: 61
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ios - SwiftSortUtils - This library takes a shot at making sorting in Swift more pleasant. It also allows you to reuse your old NSSortDescriptor instances in Swift. (Utility / Web View)
- awesome-ios-star - SwiftSortUtils - This library takes a shot at making sorting in Swift more pleasant. It also allows you to reuse your old NSSortDescriptor instances in Swift. (Utility / Web View)
- awesome-swift-cn - SwiftSortUtils - Useful functions and extensions for sorting in Swift. (Libs / Utility)
README
# SwiftSortUtils
[![CI Status](https://img.shields.io/travis/dsmatter/SwiftSortUtils.svg?style=flat)](https://travis-ci.org/dsmatter/SwiftSortUtils.svg?branch=master)
[![Version](https://img.shields.io/cocoapods/v/SwiftSortUtils.svg?style=flat)](http://cocoapods.org/pods/SwiftSortUtils)
[![License](https://img.shields.io/cocoapods/l/SwiftSortUtils.svg?style=flat)](http://cocoapods.org/pods/SwiftSortUtils)
[![Platform](https://img.shields.io/cocoapods/p/SwiftSortUtils.svg?style=flat)](http://cocoapods.org/pods/SwiftSortUtils)## Motivation
This library takes a shot at making comparing and sorting in Swift more pleasant. It also allows you to reuse your old `NSSortDescriptor` instances in Swift.
## Examples
```swift
let somePeople: [Person] = ...// Sort by a single comparable attribute
let ... = somePeople.sort(by: compareBy(\.firstname))
let ... = somePeople.sort(by: compareBy { $0.firstname })
let ... = somePeople.sort(by: compareBy(.descending, \.firstname))
let ... = somePeople.sort(byComparing: \.firstname)
let ... = somePeople.sort(byComparing: \.firstname, ordering: .descending)// Sort by multiple attributes
let ... = somePeople.sort(by:
compareBy { $0.age } <|>
compareBy { $0.lastname } <|>
compareBy(\.firstname)
)// With less cumbersome syntax:
let ... = somePeople.sort(by: \.age <|> \.firstname <|> \.lastname)
let ... = somePeople.sort(byComparing: [\.firstname, \.lastname]) // monomorphic// Append any comparator function
let ... = somePeople.sort(by:
compareBy { $0.age } <|>
{ (p1, p2) in p1.wearsGlasses() && !p2.wearsGlasses() }
)// Reverse compare functions
let ... = somePeople.sort(by:
compareBy(.descending) { $0.age } <|>
compareBy { $0.lastname } <|>
reverseComparator(compareBy(\.firstname)) // reverse any compare function
)// Mix and match extractor and compare functions:
let ... = somePeople.sort(by:
compareBy(.descending, \.age) <|>
\.firstname <|>
\.lastname <|>
reverseComparator(myCompareFunction)
)// Use an NSSortDescriptor
let ageSortDescriptor = NSSortDescriptor(key: "age", ascending: true)
let ... = somePeople.sort(ageSortDescriptor.toCompareFunction())// Even Use multiple NSSortDescriptors
let nameSortDescriptors = [
NSSortDescriptor(key: "lastname", ascending: true),
NSSortDescriptor(key: "firstname", ascending: true)
]
let ... = somePeople.sort(by: nameSortDescriptors.toCompareFunction())
```See the tests for more examples.
## Usage
To run the example project, clone the repo, and run `pod install` from the Example directory first.
## Installation
### Swift Version
This Version of SwiftSortUtils is meant to be used with Swift 5.
### CocoaPods
SwiftSortUtils is available through [CocoaPods](http://cocoapods.org). To install
it, simply add the following line to your Podfile:```ruby
pod "SwiftSortUtils"
```### Manually
Download the files in [`Pod/Classes`](https://github.com/dsmatter/SwiftSortUtils/tree/master/Pod/Classes) and drop them into your project.
## Author
Daniel Strittmatter, [email protected]
## License
SwiftSortUtils is available under the MIT license. See the LICENSE file for more info.