# `MultiArrayList`
**Experimental**: Only a small subset of a the array list API is implemented.
---
A `MultiArrayList` stores a list of a struct.
> Instead of storing a single list of items, `MultiArrayList` stores separate lists for each field of the struct.
> This allows for memory savings if the struct has padding,
> and also improves cache usage if only some fields are needed for a computation.
The primary API for accessing fields is the [`items(name)`][`MultiArrayList::items()`] function.
---
_inspired by [Zig's `MultiArrayList`](https://ziglang.org/documentation/master/std/#std.MultiArrayList)._
# Example
```rust
use multi_array_list::MultiArrayList;
use facet::Facet;
#[derive(Facet, Clone)]
struct Pizza {
radius: u32,
toppings: Vec<Topping>,
}
#[derive(Facet, Clone, Copy)]
#[repr(u8)]
enum Topping {
Tomato,
Mozzarella,
Anchovies,
}
let mut order = MultiArrayList::<Pizza>::new();
let margherita = Pizza {
radius: 12,
toppings: vec![Topping::Tomato],
};
order.push(margherita);
let napoli = Pizza {
radius: 12,
toppings: vec![Topping::Tomato, Topping::Anchovies],
};
order.push(napoli);
for topping in order.items_mut::<Vec<Topping>>("toppings") {
topping.push(Topping::Mozzarella);
}
```
## License
MIT. See [LICENSE](LICENSE).