What would be the idiomatic way of converting arrays or vectors of one type to another in Rust? The desired effect is
let x = ~[0 as int, 1 as int, 2 as int];
let y = vec::map(x, |&e| { e as uint });
but I'm not sure if the same could be achieved in a more concise fashion, similar to scalar type-casts.
I seem to fail at finding clues in the Rust manual or reference. TIA.
The Vec type allows to access values by index, because it implements the Index trait. An example will be more explicit: let v = vec![ 0, 2, 4, 6]; println!(" {}", v[1]); // it will display '2'
Vector is a module in Rust that provides the container space to store values. It is a contiguous resizable array type, with heap-allocated contents.
In general, the best you are going to get is similar to what you have (this allocates a new vector):
let x = ~[0i, 1, 2];
let y = do x.map |&e| { e as uint };
// equivalently,
let y = x.map(|&e| e as uint);
Although, if you know the bit patterns of the things you are casting between are the same (e.g. a newtype struct to the type it wraps, or casting between uint
and int
), you can do an in-place cast, that will not allocate a new vector (although it means that the old x
can not be accessed):
let x = ~[0i, 1, 2];
let y: ~[uint] = unsafe { cast::transmute(x) };
(Note that this is unsafe
, and can cause Bad Things to happen.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With