Skip to content

Commit 76e6d2f

Browse files
Rename to chunks(ofCount:)
1 parent 02808ee commit 76e6d2f

File tree

3 files changed

+42
-41
lines changed

3 files changed

+42
-41
lines changed

Guides/Chunked.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
Break a collection into subsequences where consecutive elements pass a binary
77
predicate, or where all elements in each chunk project to the same value.
88

9-
Also, includes a `chunks(of size:)` that breaks a collection into subsequences
9+
Also, includes a `chunks(ofCount:)` that breaks a collection into subsequences
1010
of a given size.
1111

1212
There are two variations of the `chunked` method: `chunked(by:)` and
@@ -29,21 +29,21 @@ let chunks = names.chunked(on: \.first!)
2929
// [["David"], ["Kyle", "Karoy"], ["Nate"]]
3030
```
3131

32-
The `chunks(of:)` takes a `size` parameter (required to be > 0) and separates
32+
The `chunks(ofCount:)` takes a `size` parameter (required to be > 0) and separates
3333
the collection into `n` chunks of this given size. If the size parameter is
3434
evenly divided by the count of the base `Collection` all the chunks will have
3535
the count equals to size. Otherwise, the last chunk will contain the remaining elements.
3636

3737
```swift
3838
let names = ["David", "Kyle", "Karoy", "Nate"]
39-
let evenly = names.chunks(of: 2)
39+
let evenly = names.chunks(ofCount: 2)
4040
// [["David", "Kyle"], ["Karoy", "Nate"]]
4141

42-
let remaining = names.chunks(of: 3)
42+
let remaining = names.chunks(ofCount: 3)
4343
// [["David", "Kyle", "Karoy"], "Nate"]]
4444
```
4545

46-
The `chunks(of:)` is the method of the [existing SE proposal][proposal].
46+
The `chunks(ofCount:)` is the method of the [existing SE proposal][proposal].
4747
Unlike the `split` family of methods, the entire collection is included in the
4848
chunked result — joining the resulting chunks recreates the original collection.
4949

Sources/Algorithms/Chunked.swift

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -266,16 +266,16 @@ public struct ChunkedCollection<Base: Collection> {
266266

267267
public let base: Base
268268
@usableFromInline
269-
internal let _size: Int
269+
internal let _chunkCount: Int
270270

271271
/// Creates a view instance that presents the elements of `base`
272272
/// in `SubSequence` chunks of the given size.
273273
///
274274
/// - Complexity: O(1)
275275
@inlinable
276-
internal init(_base: Base, _size: Int) {
276+
internal init(_base: Base, _chunkCount: Int) {
277277
self.base = _base
278-
self._size = _size
278+
self._chunkCount = _chunkCount
279279
}
280280
}
281281

@@ -299,7 +299,7 @@ extension ChunkedCollection: Collection {
299299
@inlinable
300300
public func index(after i: Index) -> Index {
301301
let baseIdx = base.index(
302-
i.base, offsetBy: _size, limitedBy: base.endIndex)
302+
i.base, offsetBy: _chunkCount, limitedBy: base.endIndex)
303303
return Index(_base: baseIdx ?? base.endIndex)
304304
}
305305
}
@@ -318,19 +318,19 @@ where Base: RandomAccessCollection {
318318
@inlinable
319319
public func index(before i: Index) -> Index {
320320
if i.base == base.endIndex {
321-
let remainder = base.count%_size
321+
let remainder = base.count%_chunkCount
322322
if remainder != 0 {
323323
return Index(_base: base.index(i.base, offsetBy: -remainder))
324324
}
325325
}
326-
return Index(_base: base.index(i.base, offsetBy: -_size))
326+
return Index(_base: base.index(i.base, offsetBy: -_chunkCount))
327327
}
328328

329329
@inlinable
330330
public func distance(from start: Index, to end: Index) -> Int {
331331
let distance = base.distance(from: start.base, to: end.base)
332332
let (quotient, remainder) =
333-
distance.quotientAndRemainder(dividingBy: _size)
333+
distance.quotientAndRemainder(dividingBy: _chunkCount)
334334
return quotient + remainder
335335
}
336336

@@ -340,14 +340,15 @@ where Base: RandomAccessCollection {
340340

341341
let bound = n > 0 ? base.endIndex : base.startIndex
342342
return Index(_base:
343-
base.index(i.base, offsetBy: n * _size, limitedBy: bound) ?? bound
343+
base.index(i.base, offsetBy: n * _chunkCount, limitedBy: bound) ?? bound
344344
)
345345
}
346346

347347
@inlinable
348348
public var count: Int {
349-
return base.count.isMultiple(of: _size) ? base.count/_size
350-
: base.count/_size + 1
349+
return base.count
350+
.isMultiple(of: _chunkCount) ? base.count/_chunkCount
351+
: base.count/_chunkCount + 1
351352
}
352353
}
353354

@@ -361,17 +362,17 @@ extension Collection {
361362
/// Otherwise, the last chunk will contain the remaining elements.
362363
///
363364
/// let c = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
364-
/// print(c.chunks(of: 5).map(Array.init))
365+
/// print(c.chunks(ofCount: 5).map(Array.init))
365366
/// // [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
366367
///
367-
/// print(c.chunks(of: 3).map(Array.init))
368+
/// print(c.chunks(ofCount: 3).map(Array.init))
368369
/// // [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
369370
///
370371
/// - Complexity: O(1)
371372
@inlinable
372-
public func chunks(of size: Int) -> ChunkedCollection<Self> {
373-
assert(size > 0, " Cannot chunk with size <= 0!")
374-
return ChunkedCollection(_base: self, _size: size)
373+
public func chunks(ofCount count: Int) -> ChunkedCollection<Self> {
374+
assert(count > 0, " Cannot chunk with size <= 0!")
375+
return ChunkedCollection(_base: self, _chunkCount: count)
375376
}
376377
}
377378

Tests/SwiftAlgorithmsTests/ChunkedTests.swift

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -79,56 +79,56 @@ final class ChunkedTests: XCTestCase {
7979

8080

8181
//===----------------------------------------------------------------------===//
82-
// Tests for `chunks(of:)`
82+
// Tests for `chunks(ofCount:)`
8383
//===----------------------------------------------------------------------===//
8484
func testChunksOfSize() {
85-
XCTAssertEqualSequences([Int]().chunks(of: 1), [])
86-
XCTAssertEqualSequences([Int]().chunks(of: 5), [])
85+
XCTAssertEqualSequences([Int]().chunks(ofCount: 1), [])
86+
XCTAssertEqualSequences([Int]().chunks(ofCount: 5), [])
8787

8888
let collection = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
89-
XCTAssertEqualSequences(collection.chunks(of: 1),
89+
XCTAssertEqualSequences(collection.chunks(ofCount: 1),
9090
[[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]])
91-
XCTAssertEqualSequences(collection.chunks(of: 3),
91+
XCTAssertEqualSequences(collection.chunks(ofCount: 3),
9292
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]])
93-
XCTAssertEqualSequences(collection.chunks(of: 5),
93+
XCTAssertEqualSequences(collection.chunks(ofCount: 5),
9494
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
95-
XCTAssertEqualSequences(collection.chunks(of: 11),
95+
XCTAssertEqualSequences(collection.chunks(ofCount: 11),
9696
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])
9797
}
9898

9999
func testChunksOfSizeBidirectional() {
100100
let collection = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
101101

102-
XCTAssertEqualSequences(collection.chunks(of: 1).reversed(),
102+
XCTAssertEqualSequences(collection.chunks(ofCount: 1).reversed(),
103103
[[10], [9], [8], [7], [6], [5], [4], [3], [2], [1]])
104-
XCTAssertEqualSequences(collection.chunks(of: 3).reversed(),
104+
XCTAssertEqualSequences(collection.chunks(ofCount: 3).reversed(),
105105
[[10], [7, 8, 9], [4, 5, 6], [1, 2, 3]])
106-
XCTAssertEqualSequences(collection.chunks(of: 5).reversed(),
106+
XCTAssertEqualSequences(collection.chunks(ofCount: 5).reversed(),
107107
[[6, 7, 8, 9, 10], [1, 2, 3, 4, 5]])
108-
XCTAssertEqualSequences(collection.chunks(of: 11).reversed(),
108+
XCTAssertEqualSequences(collection.chunks(ofCount: 11).reversed(),
109109
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])
110110
}
111111

112112
func testChunksOfSizeCount() {
113-
XCTAssertEqual([Int]().chunks(of: 1).count, 0)
114-
XCTAssertEqual([Int]().chunks(of: 5).count, 0)
113+
XCTAssertEqual([Int]().chunks(ofCount: 1).count, 0)
114+
XCTAssertEqual([Int]().chunks(ofCount: 5).count, 0)
115115

116116
let collection = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
117-
XCTAssertEqual(collection.chunks(of: 1).count, 10)
118-
XCTAssertEqual(collection.chunks(of: 3).count, 4)
119-
XCTAssertEqual(collection.chunks(of: 5).count, 2)
120-
XCTAssertEqual(collection.chunks(of: 11).count, 1)
117+
XCTAssertEqual(collection.chunks(ofCount: 1).count, 10)
118+
XCTAssertEqual(collection.chunks(ofCount: 3).count, 4)
119+
XCTAssertEqual(collection.chunks(ofCount: 5).count, 2)
120+
XCTAssertEqual(collection.chunks(ofCount: 11).count, 1)
121121
}
122122

123123
func testChunksOfSizeDistance() {
124-
let emptyChunks = [Int]().chunks(of: 1)
124+
let emptyChunks = [Int]().chunks(ofCount: 1)
125125

126126
XCTAssertEqual(
127127
emptyChunks.distance(from: emptyChunks.startIndex,
128128
to: emptyChunks.endIndex), 0)
129129

130130
let collection = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
131-
let chunks = collection.chunks(of: 3)
131+
let chunks = collection.chunks(ofCount: 3)
132132

133133
XCTAssertEqual(
134134
chunks.distance(from: chunks.startIndex, to: chunks.endIndex), 4)
@@ -146,7 +146,7 @@ final class ChunkedTests: XCTestCase {
146146
}
147147

148148
func testChunksOfSizeOffset() {
149-
let emptyChunks = [Int]().chunks(of: 1)
149+
let emptyChunks = [Int]().chunks(ofCount: 1)
150150

151151
XCTAssertEqual(
152152
emptyChunks.index(emptyChunks.startIndex, offsetBy: 1),
@@ -156,7 +156,7 @@ final class ChunkedTests: XCTestCase {
156156
emptyChunks.endIndex)
157157

158158
let collection = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
159-
let chunks = collection.chunks(of: 3)
159+
let chunks = collection.chunks(ofCount: 3)
160160

161161
XCTAssertEqual(chunks.index(chunks.startIndex, offsetBy: 1),
162162
chunks.index(after: chunks.startIndex))

0 commit comments

Comments
 (0)