swift-collectionsのSortedCollectionsを試す方法

swift-collectionsを読み込む際にmainブランチを指定する

2024年4月14日現在のswift-collectionsのリリースバージョン1.1.0では、SortedCollectionsが含まれていません(取り除かれました…)。そのため、SortedCollectionsを利用するにはリリースブランチではなく、mainブランチを利用する必要があります。

package.swiftで指定する場合は、下記のようにdependenciesでブランチを指定します。

// swift-tools-version: 5.10
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "test-sorted",
    dependencies: [
        .package(url: "https://github.com/apple/swift-collections.git", branch: "main"),
    ],
    targets: [
        // Targets are the basic building blocks of a package, defining a module or a test suite.
        // Targets can depend on other targets in this package and products from dependencies.
        .executableTarget(
            name: "test-sorted",
            dependencies: [
                .product(name: "Collections", package: "swift-collections")
            ])

    ]
)

直接 import SortedCollections で呼び出す

SortedCollectionsは安定していない、という判断から import Collections とするだけでは、SortedCollectionsは利用できません。そのため、SortedCollectionsを使いたい場合は、 import SortedCollections とする必要があります。

SortedSetを使った利用例

コードの例

import Collections
import SortedCollections

// Create random array
let randomArray = (1...15).map {_ in Int.random(in:0..<10)}

print("randomArray: \(randomArray)")

// Create different types of Sets
let normalSet = Set(randomArray)
let sortedSet = SortedSet(randomArray)
let orderedSet = OrderedSet(randomArray)

print("normalSet: \(normalSet)")
print("sortedSet: \(sortedSet)")
print("orderedSet: \(orderedSet)")

出力例

randomArray: [1, 4, 3, 6, 4, 3, 2, 5, 5, 0, 2, 3, 2, 1, 3]
normalSet: [4, 3, 0, 1, 6, 2, 5]
sortedSet: [0, 1, 2, 3, 4, 5, 6]
orderedSet: [1, 4, 3, 6, 2, 5, 0]

まだ、b-treesの影響でindexがおかしくなる報告もありますが、表面上は期待通りの動作をしているようです。

import Collections で読み込まれるようにする方法

余談ですが、 import Collection だと読み込まれないのは、Sources/Collections/Collections.swiftに追加されていないからです。ファイルを確認するとSoretedCollectionsとは別にRopeModuleもまだAPIが定まっていないという理由で正式にリリースされていないとの記載があります。

swift-collectionsをフォークして編集したら、 import Collections だけでも読み込めるようになりました。

お試しになりたい方は先ほどと同様に、package.swiftのdependenciesで下記のように指定してください。

.package(url: "https://github.com/tockrock/swift-collections.git", branch: "exp-sorted-collections"),

早くSortedCollectionsが正式にリリースされて、この記事が不要になるといいですね。