Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
Swift Algorithms is an open-source package of sequence and collection algorithms, along with their related types.
Read more about the package, and the intent behind it, in the announcement on swift.org.
Combinations / permutations
combinations(ofCount:): Combinations of particular sizes of the elements in a collection.
permutations(ofCount:): Permutations of a particular size of the elements in a collection, or of the full collection.
rotate(subrange:toStartAt:): In-place rotation of elements.
stablePartition(subrange:by:): A partition that preserves the relative order of the resulting prefix and suffix.
chain(_:_:): Concatenates two collections with the same element type.
product(_:_:): Iterates over all the pairs of two collections; equivalent to nested
cycled(times:): Repeats the elements of a collection forever or a set number of times.
randomSample(count:using:): Randomly selects a specific number of elements from a collection.
randomStableSample(count:using:): Randomly selects a specific number of elements from a collection, preserving their original relative order.
uniqued(on:): The unique elements of a collection, preserving their order.
sortedPrefix(_:by:): Returns the first k elements of a sorted collection.
Other useful operations
chunks(ofCount:): Eager and lazy operations that break a collection into chunks based on either a binary predicate or when the result of a projection changes or chunks of a given count.
indexed(): Iterate over tuples of a collection's indices and elements.
trimming(where:): Returns a slice by trimming elements from a collection's start and end.
slidingWindows(ofCount:): Breaks a collection into overlapping contiguous window subsequences where elements are slices from the original collection.
striding(by:): Returns every nth element of a collection.
Adding Swift Algorithms as a Dependency
To use the
Algorithms library in a SwiftPM project,
add the following line to the dependencies in your
.package(url: "https://github.com/apple/swift-algorithms", from: "0.0.1"),
Algorithms is under active development,
source-stability is only guaranteed within minor versions (e.g. between
If you don't want potentially source-breaking package updates,
use this dependency specification instead:
.package(url: "https://github.com/apple/swift-algorithms", .upToNextMinor(from: "0.0.1")),
"Algorithms" as a dependency for your executable target:
let package = Package( // name, platforms, products, etc. dependencies: [ .package(url: "https://github.com/apple/swift-algorithms", from: "0.0.1"), // other dependencies ], targets: [ .target(name: "<target>", dependencies: [ .product(name: "Algorithms", package: "swift-algorithms"), ]), // other targets ] )
|Last commit: 13 hours ago|
You may find interesting
Swift Algorithms 0.0.2 - 2020-10-23T22:05:36
rotate(at:)method has been updated to
rotate(toStartAt:), with the old name deprecated.
chained(with:)method has been changed to the free function
chain(_:_:), with the old version deprecated.
swift-numericspackage for its cross-platform elementary functions.
- Sequence/collection wrapper types, like
Indexed, now have conformance to the lazy protocols, so that any following operations maintain their laziness.
- Swift Algorithms now builds under SwiftPM on Windows.
- A wide variety of errors, misspellings, and ommissions in the documentation and guides have been fixed.
- Index/distance calculations for the
Chaintypes have been corrected.
stablePartition(subrange:by:)now correctly uses the subrange's length instead of the whole collection.