@@ -508,6 +508,7 @@ impl<T> [T] {
508
508
/// ```
509
509
/// assert_eq!(["hello", "world"].join(" "), "hello world");
510
510
/// assert_eq!([[1, 2], [3, 4]].join(&0), [1, 2, 0, 3, 4]);
511
+ /// assert_eq!([[1, 2], [3, 4]].join(&[0, 0][..]), [1, 2, 0, 0, 3, 4]);
511
512
/// ```
512
513
#[ stable( feature = "rename_connect_to_join" , since = "1.3.0" ) ]
513
514
pub fn join < Separator > ( & self , sep : Separator ) -> <Self as Join < Separator > >:: Output
@@ -654,7 +655,7 @@ impl<T: Clone, V: Borrow<[T]>> Join<&'_ T> for [V] {
654
655
Some ( first) => first,
655
656
None => return vec ! [ ] ,
656
657
} ;
657
- let size = slice. iter ( ) . map ( |slice| slice . borrow ( ) . len ( ) ) . sum :: < usize > ( ) + slice. len ( ) - 1 ;
658
+ let size = slice. iter ( ) . map ( |v| v . borrow ( ) . len ( ) ) . sum :: < usize > ( ) + slice. len ( ) - 1 ;
658
659
let mut result = Vec :: with_capacity ( size) ;
659
660
result. extend_from_slice ( first. borrow ( ) ) ;
660
661
@@ -666,6 +667,29 @@ impl<T: Clone, V: Borrow<[T]>> Join<&'_ T> for [V] {
666
667
}
667
668
}
668
669
670
+ #[ unstable( feature = "slice_concat_ext" , issue = "27747" ) ]
671
+ impl < T : Clone , V : Borrow < [ T ] > > Join < & ' _ [ T ] > for [ V ] {
672
+ type Output = Vec < T > ;
673
+
674
+ fn join ( slice : & Self , sep : & [ T ] ) -> Vec < T > {
675
+ let mut iter = slice. iter ( ) ;
676
+ let first = match iter. next ( ) {
677
+ Some ( first) => first,
678
+ None => return vec ! [ ] ,
679
+ } ;
680
+ let size = slice. iter ( ) . map ( |v| v. borrow ( ) . len ( ) ) . sum :: < usize > ( ) +
681
+ sep. len ( ) * ( slice. len ( ) - 1 ) ;
682
+ let mut result = Vec :: with_capacity ( size) ;
683
+ result. extend_from_slice ( first. borrow ( ) ) ;
684
+
685
+ for v in iter {
686
+ result. extend_from_slice ( sep) ;
687
+ result. extend_from_slice ( v. borrow ( ) )
688
+ }
689
+ result
690
+ }
691
+ }
692
+
669
693
////////////////////////////////////////////////////////////////////////////////
670
694
// Standard trait implementations for slices
671
695
////////////////////////////////////////////////////////////////////////////////
0 commit comments