Skip to content

Commit 7eccff2

Browse files
Added vectors file
1 parent ef1a773 commit 7eccff2

1 file changed

Lines changed: 171 additions & 0 deletions

File tree

examples/06_vectors.rs

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
use std::string;
2+
3+
fn main() {
4+
// PART 1 -> Creating a Vec
5+
6+
// Method 1 - empty Vec, type must be specified
7+
let mut nums: Vec<i32> = Vec::new();
8+
println!("empty vec: {:?}", nums);
9+
10+
// Method 2 - vec! macro, type is inferred
11+
let scores = vec![10, 20, 30, 40, 50];
12+
println!("Scores: {:?}", scores);
13+
14+
// Method 3: vec of strings
15+
let names = vec![
16+
String::from("alice"),
17+
String::from("bob"),
18+
String::from("charlie"),
19+
];
20+
21+
println!("names: {:?}", names);
22+
23+
// PART 2: Adding & Removing Items
24+
25+
let mut fruits = Vec::new();
26+
27+
//push -- add to the END
28+
fruits.push("apple");
29+
fruits.push("banana");
30+
fruits.push("cranberries");
31+
println!("after push : {:?}", fruits);
32+
33+
// pop -- remove from the END, returns Option
34+
let last = fruits.pop();
35+
match last {
36+
Some(f) => println!("popped: {}", f),
37+
None => println!("vec was empty"),
38+
}
39+
40+
println!("after pop: {:?}", fruits);
41+
42+
fruits.insert(1, "mango");
43+
println!("after insert at 1: {:?}", fruits);
44+
45+
// remove --> remove at a specific index, returns the value
46+
let removed = fruits.remove(0);
47+
println!("removed index 0: {}", removed);
48+
println!("after remove: {:?}", fruits);
49+
50+
// PART 3: Accessing Items
51+
let numbers = vec![10, 20, 30, 40, 50];
52+
53+
// Method 1
54+
println!("index 0: {}", numbers[0]);
55+
56+
// Method 2
57+
match numbers.get(2) {
58+
Some(n) => println!("get(2): {}", n),
59+
None => println!("index out of bounds"),
60+
}
61+
62+
match numbers.get(99) {
63+
Some(n) => println!("get(99): {}", n),
64+
none => println!("get(99): index does not exists"),
65+
}
66+
67+
println!("first: {:?}", numbers.first());
68+
println!("last: {:?}", numbers.last());
69+
70+
// PART 4: Useful Vec Methods
71+
72+
let mut v = vec![3, 1, 4, 1, 5, 9, 2, 6];
73+
74+
println!("len: {}", v.len());
75+
println!("is_empty: {}", v.is_empty());
76+
77+
//contains
78+
println!("contains 5 : {}", v.contains(&5));
79+
println!("contains 7: {}", v.contains(&7));
80+
81+
v.sort();
82+
println!("sorted array : {:?}", v);
83+
84+
v.reverse();
85+
println!("reversed array: {:?}", v);
86+
87+
// dedup => removed consecutive duplicated (sort first)
88+
v.sort();
89+
v.dedup();
90+
println!("deduped: {:?}", v); // [1,2,3,4,5,6,9]
91+
92+
let mut temp = vec![1, 2, 3];
93+
temp.clear();
94+
println!("after clear: {:?}", temp);
95+
96+
// PART 5: looping over a vec
97+
98+
let colors = vec!["red", "green", "blue"];
99+
100+
for i in &colors {
101+
// colors will still valid becuz we borrowed
102+
println!("color : {}", i);
103+
}
104+
105+
// loop with mut - modify each item
106+
let mut prices = vec![20, 40, 60];
107+
for price in &mut prices {
108+
*price *= 2; // * -> dereferences -- needed to modify
109+
}
110+
111+
println!("doubled prices: {:?}", prices);
112+
113+
// PART 6 : Vec of Structs -- IMPORTANT
114+
115+
#[derive(Debug)]
116+
struct Student {
117+
name: String,
118+
grade: u32,
119+
}
120+
121+
let students = vec![
122+
Student {
123+
name: String::from("Alice"),
124+
grade: 90,
125+
},
126+
Student {
127+
name: String::from("in"),
128+
grade: 55,
129+
},
130+
Student {
131+
name: String::from("wonderland"),
132+
grade: 87,
133+
},
134+
];
135+
136+
for i in &students {
137+
println!("{} scored {}", i.name, i.grade);
138+
}
139+
140+
// PART 7: Slices -- a window into a Vec
141+
let nums = vec![1, 2, 3, 4, 5];
142+
143+
// A slice is a reference to a position of a vec
144+
let slice = &nums[1..4];
145+
println!("slice: {:?}", slice);
146+
147+
let all = &nums[..];
148+
println!("all: {:?}", all);
149+
150+
// PART 8: Useful Patterns
151+
152+
let numbers = vec![1, 2, 3, 4, 5];
153+
154+
let sum: i32 = numbers.iter().sum();
155+
println!("sum: {}", sum);
156+
157+
println!("max: {:?}", numbers.iter().max());
158+
println!("min: {:?}", numbers.iter().min());
159+
160+
// count items matching a condition
161+
let even = numbers.iter().filter(|&x| x % 2 == 0).count();
162+
println!("even count: {}", even);
163+
164+
// check if any item matches
165+
let has_big = numbers.iter().any(|&x| x > 4);
166+
println!("any > 4: {}", has_big);
167+
168+
// check if all items match
169+
let all_positive = numbers.iter().all(|&x| x > 0);
170+
println!("all positive: {}", all_positive);
171+
}

0 commit comments

Comments
 (0)