Struct arrow_array::builder::GenericListBuilder
source · pub struct GenericListBuilder<OffsetSize: OffsetSizeTrait, T: ArrayBuilder> { /* private fields */ }
Expand description
Builder for GenericListArray
Use ListBuilder
to build ListArray
s and LargeListBuilder
to build LargeListArray
s.
Example
Here is code that constructs a ListArray with the contents:
[[A,B,C], [], NULL, [D], [NULL, F]]
let values_builder = StringBuilder::new();
let mut builder = ListBuilder::new(values_builder);
// [A, B, C]
builder.values().append_value("A");
builder.values().append_value("B");
builder.values().append_value("C");
builder.append(true);
// [ ] (empty list)
builder.append(true);
// Null
builder.values().append_value("?"); // irrelevant
builder.append(false);
// [D]
builder.values().append_value("D");
builder.append(true);
// [NULL, F]
builder.values().append_null();
builder.values().append_value("F");
builder.append(true);
// Build the array
let array = builder.finish();
// Values is a string array
// "A", "B" "C", "?", "D", NULL, "F"
assert_eq!(
array.values().as_ref(),
&StringArray::from(vec![
Some("A"), Some("B"), Some("C"),
Some("?"), Some("D"), None,
Some("F")
])
);
// Offsets are indexes into the values array
assert_eq!(
array.value_offsets(),
&[0, 3, 3, 4, 5, 7]
);
Implementations§
source§impl<OffsetSize: OffsetSizeTrait, T: ArrayBuilder> GenericListBuilder<OffsetSize, T>
impl<OffsetSize: OffsetSizeTrait, T: ArrayBuilder> GenericListBuilder<OffsetSize, T>
sourcepub fn new(values_builder: T) -> Self
pub fn new(values_builder: T) -> Self
Creates a new GenericListBuilder
from a given values array builder
sourcepub fn with_capacity(values_builder: T, capacity: usize) -> Self
pub fn with_capacity(values_builder: T, capacity: usize) -> Self
Creates a new GenericListBuilder
from a given values array builder
capacity
is the number of items to pre-allocate space for in this builder
source§impl<OffsetSize: OffsetSizeTrait, T> GenericListBuilder<OffsetSize, T>where
T: 'static + ArrayBuilder,
impl<OffsetSize: OffsetSizeTrait, T> GenericListBuilder<OffsetSize, T>where T: 'static + ArrayBuilder,
sourcepub fn values(&mut self) -> &mut T
pub fn values(&mut self) -> &mut T
Returns the child array builder as a mutable reference.
This mutable reference can be used to append values into the child array builder,
but you must call append
to delimit each distinct list value.
sourcepub fn values_ref(&self) -> &T
pub fn values_ref(&self) -> &T
Returns the child array builder as an immutable reference
sourcepub fn append(&mut self, is_valid: bool)
pub fn append(&mut self, is_valid: bool)
Finish the current variable-length list array slot
Panics
Panics if the length of Self::values
exceeds OffsetSize::MAX
sourcepub fn append_value<I, V>(&mut self, i: I)where
T: Extend<Option<V>>,
I: IntoIterator<Item = Option<V>>,
pub fn append_value<I, V>(&mut self, i: I)where T: Extend<Option<V>>, I: IntoIterator<Item = Option<V>>,
Append a value to this GenericListBuilder
let mut builder = ListBuilder::new(Int32Builder::new());
builder.append_value([Some(1), Some(2), Some(3)]);
builder.append_value([]);
builder.append_value([None]);
let array = builder.finish();
assert_eq!(array.len(), 3);
assert_eq!(array.value_offsets(), &[0, 3, 3, 4]);
let values = array.values().as_primitive::<Int32Type>();
assert_eq!(values, &Int32Array::from(vec![Some(1), Some(2), Some(3), None]));
This is an alternative API to appending directly to Self::values
and
delimiting the result with Self::append
let mut builder = ListBuilder::new(Int32Builder::new());
builder.values().append_value(1);
builder.values().append_value(2);
builder.values().append_value(3);
builder.append(true);
builder.append(true);
builder.values().append_null();
builder.append(true);
let array = builder.finish();
assert_eq!(array.len(), 3);
assert_eq!(array.value_offsets(), &[0, 3, 3, 4]);
let values = array.values().as_primitive::<Int32Type>();
assert_eq!(values, &Int32Array::from(vec![Some(1), Some(2), Some(3), None]));
sourcepub fn append_null(&mut self)
pub fn append_null(&mut self)
Append a null to this GenericListBuilder
See Self::append_value
for an example use.
sourcepub fn append_option<I, V>(&mut self, i: Option<I>)where
T: Extend<Option<V>>,
I: IntoIterator<Item = Option<V>>,
pub fn append_option<I, V>(&mut self, i: Option<I>)where T: Extend<Option<V>>, I: IntoIterator<Item = Option<V>>,
Appends an optional value into this GenericListBuilder
If Some
calls Self::append_value
otherwise calls Self::append_null
sourcepub fn finish(&mut self) -> GenericListArray<OffsetSize>
pub fn finish(&mut self) -> GenericListArray<OffsetSize>
Builds the GenericListArray
and reset this builder.
sourcepub fn finish_cloned(&self) -> GenericListArray<OffsetSize>
pub fn finish_cloned(&self) -> GenericListArray<OffsetSize>
Builds the GenericListArray
without resetting the builder.
sourcepub fn offsets_slice(&self) -> &[OffsetSize]
pub fn offsets_slice(&self) -> &[OffsetSize]
Returns the current offsets buffer as a slice
Trait Implementations§
source§impl<OffsetSize: OffsetSizeTrait, T> ArrayBuilder for GenericListBuilder<OffsetSize, T>where
T: 'static + ArrayBuilder,
impl<OffsetSize: OffsetSizeTrait, T> ArrayBuilder for GenericListBuilder<OffsetSize, T>where T: 'static + ArrayBuilder,
source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
Returns the builder as a mutable Any
reference.
source§fn finish_cloned(&self) -> ArrayRef
fn finish_cloned(&self) -> ArrayRef
Builds the array without resetting the builder.
source§impl<OffsetSize: Debug + OffsetSizeTrait, T: Debug + ArrayBuilder> Debug for GenericListBuilder<OffsetSize, T>
impl<OffsetSize: Debug + OffsetSizeTrait, T: Debug + ArrayBuilder> Debug for GenericListBuilder<OffsetSize, T>
source§impl<O: OffsetSizeTrait, T: ArrayBuilder + Default> Default for GenericListBuilder<O, T>
impl<O: OffsetSizeTrait, T: ArrayBuilder + Default> Default for GenericListBuilder<O, T>
source§impl<O, B, V, E> Extend<Option<V>> for GenericListBuilder<O, B>where
O: OffsetSizeTrait,
B: ArrayBuilder + Extend<E>,
V: IntoIterator<Item = E>,
impl<O, B, V, E> Extend<Option<V>> for GenericListBuilder<O, B>where O: OffsetSizeTrait, B: ArrayBuilder + Extend<E>, V: IntoIterator<Item = E>,
source§fn extend<T: IntoIterator<Item = Option<V>>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = Option<V>>>(&mut self, iter: T)
source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)