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
}
```
This commit is contained in:
bors 2018-12-09 22:39:44 +00:00
commit 9cb38a84e7

View file

@ -589,7 +589,7 @@ impl<T: Clone, V: Borrow<[T]>> SliceConcatExt<T> for [V] {
type Output = Vec<T>; type Output = Vec<T>;
fn concat(&self) -> Vec<T> { fn concat(&self) -> Vec<T> {
let size = self.iter().fold(0, |acc, v| acc + v.borrow().len()); let size = self.iter().map(|slice| slice.borrow().len()).sum();
let mut result = Vec::with_capacity(size); let mut result = Vec::with_capacity(size);
for v in self { for v in self {
result.extend_from_slice(v.borrow()) result.extend_from_slice(v.borrow())
@ -603,8 +603,8 @@ impl<T: Clone, V: Borrow<[T]>> SliceConcatExt<T> for [V] {
Some(first) => first, Some(first) => first,
None => return vec![], None => return vec![],
}; };
let size = self.iter().fold(0, |acc, v| acc + v.borrow().len()); let size = self.iter().map(|slice| slice.borrow().len()).sum::<usize>() + self.len() - 1;
let mut result = Vec::with_capacity(size + self.len()); let mut result = Vec::with_capacity(size);
result.extend_from_slice(first.borrow()); result.extend_from_slice(first.borrow());
for v in iter { for v in iter {