# apple/swift-algorithms

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/apple-swift-algorithms).**

6,293 stars · 473 forks · Swift · apache-2.0

## Links

- GitHub: https://github.com/apple/swift-algorithms
- awesome-repositories: https://awesome-repositories.com/repository/apple-swift-algorithms.md

## Topics

`algorithm` `iterator` `itertools`

## Description

Swift Algorithms is a library of sequence and collection algorithms for Swift, providing operations for splitting, cycling, combining, and sampling collections with lazy evaluation. It extends Swift's standard library with algorithms that work across all types conforming to Sequence and Collection protocols, enabling efficient data processing without intermediate storage.

The library specializes in combinatorial enumeration, generating all possible permutations, combinations, and product sequences from collections for testing and exploration. It also includes utilities for splitting collections into groups based on element properties or transformations, creating infinite sequences by repeating collection elements, and selecting random subsets of unique elements without replacement.

Additional capabilities include chunking collections by predicate conditions, cycling over collection elements endlessly, and performing lazy sequence operations that compute elements on demand during iteration. The library is distributed as a Swift package, with documentation and source code available through the Swift Package Manager.

## Tags

### Data & Databases

- [Swift Collection Extensions](https://awesome-repositories.com/f/data-databases/array-manipulation-utilities/swift-collection-extensions.md) — Provides a library of collection algorithms for splitting, cycling, combining, and sampling Swift collections.
- [Collection Element Transformations](https://awesome-repositories.com/f/data-databases/collection-element-transformations.md) — Provides predicate-based chunking to break collections into consecutive groups by matching properties. ([source](https://cdn.jsdelivr.net/gh/apple/swift-algorithms@main/README.md))
- [Infinite Cycling](https://awesome-repositories.com/f/data-databases/collection-element-transformations/infinite-cycling.md) — Provides algorithms for cycling over collection elements endlessly to create infinite sequences. ([source](https://cdn.jsdelivr.net/gh/apple/swift-algorithms@main/README.md))
- [Predicate-Based Chunking](https://awesome-repositories.com/f/data-databases/collection-element-transformations/predicate-based-chunking.md) — Ships algorithms for chunking collections by predicate conditions into consecutive groups. ([source](https://cdn.jsdelivr.net/gh/apple/swift-algorithms@main/README.md))

### Programming Languages & Runtimes

- [Collection Combinatorics](https://awesome-repositories.com/f/programming-languages-runtimes/collection-combinatorics.md) — Combinatorial operations that generate permutations, combinations, and product sequences from Swift collections.
- [Generic Monomorphisation](https://awesome-repositories.com/f/programming-languages-runtimes/compile-time-type-dispatch/generic-monomorphisation.md) — Provides compile-time specialization of generic algorithms for each concrete collection type.
- [Lazy Sequences](https://awesome-repositories.com/f/programming-languages-runtimes/deferred-execution/lazy-evaluation/lazy-sequences.md) — Implements lazy sequence operations that chain transformations without intermediate storage.

### Scientific & Mathematical Computing

- [Combinatorial Generators](https://awesome-repositories.com/f/scientific-mathematical-computing/numerical-mathematical-foundations/arithmetic-number-types/multiplication-algorithms/number-theory-algorithms/permutation-order-calculations/combinatorial-generators.md) — Generates all permutations and combinations of collection elements for combinatorial testing and exploration.

### Software Engineering & Architecture

- [Generic Data Abstractions](https://awesome-repositories.com/f/software-engineering-architecture/abstract-data-types/generic-data-abstractions.md) — Defines algorithms as protocol extensions on Sequence and Collection for reuse across all conforming types.
- [Generator-Based Iterators](https://awesome-repositories.com/f/software-engineering-architecture/compile-time-code-generation/iterative-code-generation/generator-based-iterators.md) — Implements combinatorial algorithms as stateful iterators that yield elements one at a time.
- [Copy-On-Write Proxying](https://awesome-repositories.com/f/software-engineering-architecture/copy-on-write-proxying.md) — Implements copy-on-write value semantics for collection operations to ensure predictable performance.
- [Permutation Generation Algorithms](https://awesome-repositories.com/f/software-engineering-architecture/permutation-generation-algorithms.md) — Generates all possible permutations and combinations of collection elements for combinatorial testing. ([source](https://cdn.jsdelivr.net/gh/apple/swift-algorithms@main/README.md))
- [Random Sampling](https://awesome-repositories.com/f/software-engineering-architecture/randomized-selection-algorithms/randomized-data-retrieval/random-sampling.md) — Selects random subsets of unique elements from collections without replacement for sampling.

### Web Development

- [Collection Partitioning & Grouping](https://awesome-repositories.com/f/web-development/api-management-tools/content-static-site-generation/content-collection-managers/collection-manipulation-utilities/collection-partitioning-grouping.md) — Provides chunking and grouping algorithms that partition collections by element properties or predicates.

### Artificial Intelligence & ML

- [Lazy Infinite Sequences](https://awesome-repositories.com/f/artificial-intelligence-ml/infinite-sequence-processing/lazy-infinite-sequences.md) — Repeats collection elements endlessly to create infinite sequences for continuous iteration.
- [Collection Cyclers](https://awesome-repositories.com/f/artificial-intelligence-ml/infinite-sequence-processing/lazy-infinite-sequences/collection-cyclers.md) — Ships a cycle algorithm that repeats collection elements to form an infinite sequence.
