Skip to content

Commit d238a1a

Browse files
committed
Fix warning about borrowing maps
Full context in this issue - rust-lang/rust#59159 It is currently a warning to borrow a map as mutable and then modify it. Replacing such uses with the entry API.
1 parent cc9005b commit d238a1a

5 files changed

Lines changed: 24 additions & 27 deletions

File tree

src/day02.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,9 @@ fn character_counts(s: &str, n: usize) -> bool {
1717
fn counts(s: &str) -> HashMap<char, usize> {
1818
let mut result: HashMap<char, usize> = HashMap::new();
1919
for c in s.chars() {
20-
match result.get(&c) {
21-
Some(cur) => result.insert(c, cur + 1),
22-
None => result.insert(c, 1),
23-
};
20+
result.entry(c)
21+
.and_modify(|cur| *cur = *cur + 1)
22+
.or_insert(1);
2423
}
2524
result
2625
}

src/day03.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,13 @@ fn count_dupes(big_cloth: &HashMap<(u32, u32), i32>) -> u32 {
5555
fn find_perfect(clothes: &[Cloth], big_cloth: &HashMap<(u32, u32), i32>) -> i32 {
5656
let mut successes = HashMap::new();
5757
big_cloth.values().filter(|x| **x > 0).for_each(|x| {
58-
match successes.get(&x) {
59-
Some(cur) => successes.insert(x, cur + 1),
60-
None => successes.insert(x, 1),
61-
};
58+
successes.entry(x)
59+
.and_modify(|cur| *cur = *cur + 1)
60+
.or_insert(1);
61+
// match successes.get(&x) {
62+
// Some(cur) => successes.insert(x, cur + 1),
63+
// None => successes.insert(x, 1),
64+
// };
6265
});
6366
for cloth in clothes {
6467
match successes.get(&cloth.id) {

src/day04.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ fn minute_most_often_asleep(naps: &[Nap]) -> (i32, i32) {
9898
}
9999
for nap in naps {
100100
for minute in nap.start.time().minute()..nap.end.time().minute() {
101-
let cur = &minutes[&minute];
102-
minutes.insert(minute, cur + 1);
101+
minutes.entry(minute)
102+
.and_modify(|cur| *cur = *cur + 1);
103103
}
104104
}
105105
let mut high_naps = 0;
@@ -130,14 +130,9 @@ fn process_logs(s: &str) -> HashMap<i32, Vec<Nap>> {
130130
end: time,
131131
};
132132
let guard = current_guard.unwrap();
133-
match guard_naps.get_mut(&guard) {
134-
Some(v) => {
135-
v.push(nap);
136-
}
137-
None => {
138-
guard_naps.insert(guard, vec![nap]);
139-
}
140-
}
133+
guard_naps.entry(guard)
134+
.or_default()
135+
.push(nap);
141136
start_time = None;
142137
}
143138
Err(()) => panic!("error while parsing"),

src/day06.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,10 @@ impl Grid {
5353
let nearest = tile.unwrap();
5454
if self.is_edge(i, j) {
5555
result.remove(&nearest);
56-
}
57-
let r = result.get(&nearest);
58-
if r.is_none() {
5956
continue;
6057
}
61-
let times = r.unwrap();
62-
result.insert(nearest, times + 1);
58+
result.entry(nearest)
59+
.and_modify(|times| *times = *times + 1);
6360
}
6461
}
6562
*result.values().max().unwrap()

src/day09.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,13 @@ impl Board {
3030
if marble % 23 == 0 {
3131
current_index = (self.marbles.len() + current_index - 7) % self.marbles.len();
3232
let score = marble + self.marbles.remove(current_index);
33-
match self.scores.get(&current_player) {
34-
Some(n) => self.scores.insert(current_player, score + n),
35-
None => self.scores.insert(current_player, score),
36-
};
33+
self.scores.entry(current_player)
34+
.and_modify(|n| *n = *n + score)
35+
.or_insert(score);
36+
// match self.scores.get(&current_player) {
37+
// Some(n) => self.scores.insert(current_player, score + n),
38+
// None => self.scores.insert(current_player, score),
39+
// };
3740
continue;
3841
}
3942

0 commit comments

Comments
 (0)