Swift Algorithmsは、Swift標準ライブラリのギャップを埋めるシーケンスアルゴリズムとコレクションアルゴリズムを多数含む新しいパッケージである。AppleのエンジニアであるNatCookは次のように記述している。
Algorithmsパッケージには、他の一般的なプログラミング言語でよく見られる強力で汎用的なアルゴリズムが多数含まれています。この新しいパッケージが、人々がアルゴリズムを採用し、彼らのコードの正確性とパフォーマンスを向上させるのに役立つことを願っています。
他の言語で利用できる同様のライブラリの例として、Cook氏はPython用のitertoolsとC++ アルゴリズムライブラリについて言及している。具体的には、Swift Algorithmsには、Sequence
プロトコルとCollection
プロトコルの一般的なアルゴリズムが含まれる。並べ替えアルゴリズムや非線形データ構造のアルゴリズムなどの従来のアルゴリズムは含まれない。
適切なアルゴリズムとデータ構造を選択することの重要であることは大げさではない。これをサポートする標準ライブラリがないため、Swift開発者の注意が十分に向かない場合がある。Dave Abrahams氏は、WWDC2018で行った"Embrace Algorithms"の講演でそのことに言及した。
Algorithmsパッケージは、関連するアルゴリズムの新しいファミリーを構築するための敷居を低くする場として機能することにより、この目標の実現に役立つと考えています。問題空間を繰り返し探索し、さまざまなアルゴリズムがどのように接続して相互作用するかを学ぶ機会を与えてくれます。それは、標準ライブラリに組み込まれる前にです。
Swift Algorithmsはまだ初期段階にあり、含まれるアルゴリズムの数はまだかなり減少している。具体的には、Swift Algorithmsに含まれるもは次の通りである。コレクションの要素の組み合わせを計算するCombinations
ジェネリック型。コレクションの要素またはそれらの要素のサブセットの順列を計算するためのPermutations
ジェネリック型。2つのコレクション内の要素のすべてのペアを反復処理するproduct
関数。コレクションをサブシーケンスに分割するためのchunked
メソッドの集合。同じ要素タイプの2つのコレクションを連結するchain
メソッド。コレクションを反復処理するための一連のcycle
メソッド。シーケンスまたはコレクションから繰り返される要素を取り除くuniqued
メソッド。シーケンスまたはコレクションからk個の要素をランダムに選択するための操作を実行するためのrandomSample
メソッドの集合。2つのコレクションの要素をペアにするindexed
メソッド。可変コレクションで安定したパーティションを実行し、すでにパーティション化されたコレクションでパーティション化インデックスを見つけるためのpartition
メソッド。コレクションの要素を新しい位置にローテートさせるrotating
メソッド。
Swift Algorithmsの使用を開始するには、Package.swift
ファイルの実行可能ターゲットの依存関係として追加できる。
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
]
)
ライブラリの使用については、Swift Algorithms Forumで議論でき、新しいアイデアをIssueとして提出できる。
Swift Algorithmsが登場する前は、Swift開発者はSwift Algorithm Clubライブラリを使用できました。これは、前者よりもはるかに成熟しており、シーケンスやコレクションに関連するだけでなく、並べ替え、非線形データ構造などを含む100を超えるアルゴリズムが含まれている。