99228
January 10, 2020, 3:49am
1
What is the most idiomatic way to write the following piece of code preferably in one line? Sorry, I am learning Rust. I'd really appreciate your help.
let mut ret:Vec<i32> = (-(n-1)/2..=-1).collect();
ret.push(0);
ret.extend(1..=(n-1)/2);
Sample vector contents as a result for n=5
:
[-2, -1, 0, 1, 2]
This may actually be more efficient than the "idiomatic" way in this case. But either way, here it is:
let ret = (1..n * 2).map(|x| x - n).collect::<Vec<_>>();
Playground
Ack! Wait, I misread your question, n = 5
in your example, which is not what my program would produce. I will update shortly with a solution.
Adding n = (n + 1) / 2;
before that makes my original solution work.
Playground
I'd rather spend more time on it but I cannot at the moment.
1 Like
99228
January 10, 2020, 4:07am
3
Thank you. I get the idea. This works for me:
let ret = (-n/2..=n/2).map(|x| x).collect::<Vec<_>>();
1 Like
That .map(|x| x)
does nothing, so you can remove it.
4 Likes
system
Closed
April 9, 2020, 4:17am
5
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.