Skip to content

Commit 9cb38a8

Browse files
committed
Auto merge of #56463 - ljedrz:slice_concat_join, r=nikic
slice: tweak concat & join - use `sum` instead of `fold` (readability) - adjust the capacity for `join` - the number of separators is `n - 1`, not `n`; proof: ``` fn main() { let a = [[1, 2], [4, 5]]; let v = a.join(&3); assert_ne!(v.len(), v.capacity()); // len is 5, capacity is 6 } ```
2 parents b755501 + ae53273 commit 9cb38a8

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/liballoc/slice.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ impl<T: Clone, V: Borrow<[T]>> SliceConcatExt<T> for [V] {
589589
type Output = Vec<T>;
590590

591591
fn concat(&self) -> Vec<T> {
592-
let size = self.iter().fold(0, |acc, v| acc + v.borrow().len());
592+
let size = self.iter().map(|slice| slice.borrow().len()).sum();
593593
let mut result = Vec::with_capacity(size);
594594
for v in self {
595595
result.extend_from_slice(v.borrow())
@@ -603,8 +603,8 @@ impl<T: Clone, V: Borrow<[T]>> SliceConcatExt<T> for [V] {
603603
Some(first) => first,
604604
None => return vec![],
605605
};
606-
let size = self.iter().fold(0, |acc, v| acc + v.borrow().len());
607-
let mut result = Vec::with_capacity(size + self.len());
606+
let size = self.iter().map(|slice| slice.borrow().len()).sum::<usize>() + self.len() - 1;
607+
let mut result = Vec::with_capacity(size);
608608
result.extend_from_slice(first.borrow());
609609

610610
for v in iter {

0 commit comments

Comments
 (0)