Rust’s slice::windows
is really cool
This post is one of several that outline my perspective on learning Rust as someone who primarily uses JavaScript. You can find the rest here.
Rust has a lot of powerful features associated with its primitives and standard library. A cool one I just came across is the method slice::windows
. This method returns an iterator over a slice
. The iterator length can be specified. It lets you iterate over a slice and have a window of a specific size on each pass. For example:
// windows.rslet slice = ['w', 'i', 'n', 'd', 'o', 'w', 's'];for window in slice.windows(2) {
&println!{"[{}, {}]", window[0], window[1]};
}// prints: [w, i] -> [i, n] -> [n, d] -> [d, o] -> [o, w] -> [w, s]
This is pretty cool, and doesn’t really have a parallel in JavaScript. The closest that I can come up with to achieve the same is this:
// windows.jslet slice = ["w", "i", "n", "d", "o", "w", "s"];slice.forEach((char, index) => {
if (index === slice.length - 1) return; console.log(`[${slice[index]}, ${slice[index + 1]}]`);
});
The JavaScript approach is definitely less ergonomic, and I really like the concept of windows as an abstraction for use with iterators.
Thanks for reading.