]> git.lizzy.rs Git - rust.git/commitdiff
Adding a function to concatanate vectors with a separator
authorErick Tryzelaar <erick.tryzelaar@gmail.com>
Sat, 28 Jan 2012 23:41:53 +0000 (15:41 -0800)
committerErick Tryzelaar <erick.tryzelaar@gmail.com>
Sat, 28 Jan 2012 23:41:53 +0000 (15:41 -0800)
src/libcore/vec.rs

index 3e888008c68476d6f710f87a73ccac8ca7984275..dd256af1d6f56ef664069e0e9e99134be4b0a7bf 100644 (file)
@@ -599,6 +599,21 @@ fn concat<T: copy>(v: [const [const T]]) -> [T] {
     ret new;
 }
 
+/*
+Function: connect
+
+Concatenate a vector of vectors, placing a given separator between each
+*/
+fn connect<T: copy>(v: [const [const T]], sep: T) -> [T] {
+    let new: [T] = [];
+    let first = true;
+    for inner: [T] in v {
+        if first { first = false; } else { push(new, sep); }
+        new += inner;
+    }
+    ret new;
+}
+
 /*
 Function: foldl
 
@@ -1927,6 +1942,13 @@ fn test_concat() {
         assert concat([[1], [2,3]]) == [1, 2, 3];
     }
 
+    #[test]
+    fn test_connect() {
+        assert connect([], 0) == [];
+        assert connect([[1], [2, 3]], 0) == [1, 0, 2, 3];
+        assert connect([[1], [2], [3]], 0) == [1, 0, 2, 0, 3];
+    }
+
     #[test]
     fn test_windowed () {
         assert [[1u,2u,3u],[2u,3u,4u],[3u,4u,5u],[4u,5u,6u]]