use arrow2::array::growable::{Growable, GrowablePrimitive}; use arrow2::array::PrimitiveArray; fn main() { // say we have two sorted arrays let array0 = PrimitiveArray::::from_vec(vec![1, 2, 5]); let array1 = PrimitiveArray::::from_vec(vec![3, 4, 6]); // and we found a way to compute the slices that sort them: // (array_index, start of the slice, length of the slice) let slices = &[ // [1, 2] from array0 (0, 0, 2), // [3, 4] from array1 (1, 0, 2), // [5] from array0 (0, 2, 1), // [6] from array1 (1, 2, 1), ]; // we can build a new array out of these slices as follows: // first, declare the growable out of the arrays. Since we are not extending with nulls, // we use `false`. We also pre-allocate, as we know that we will need all entries. let capacity = array0.len() + array1.len(); let use_validity = false; let mut growable = GrowablePrimitive::new(vec![&array0, &array1], use_validity, capacity); // next, extend the growable: for slice in slices { growable.extend(slice.0, slice.1, slice.2); } // finally, convert it to the array (this is `O(1)`) let result: PrimitiveArray = growable.into(); let expected = PrimitiveArray::::from_vec(vec![1, 2, 3, 4, 5, 6]); assert_eq!(result, expected); }