store ids per coalition in hashmap

This commit is contained in:
132nd-Professor
2022-08-05 16:36:06 +02:00
parent e9be340a6b
commit 3658dbcdf7
2 changed files with 14 additions and 12 deletions
+5 -4
View File
@@ -1,4 +1,5 @@
pub mod lib { pub mod lib {
use std::collections::HashSet;
use std::fs; use std::fs;
use std::io::Write; use std::io::Write;
@@ -9,10 +10,10 @@ pub mod lib {
const ERR_CANNOT_BEGIN_FILE: &str = "Could not begin file in zip archive"; const ERR_CANNOT_BEGIN_FILE: &str = "Could not begin file in zip archive";
pub struct IDs<'a> { pub struct IDs<'a> {
pub blue: Vec<&'a str>, pub blue: HashSet<&'a str>,
pub red: Vec<&'a str>, pub red: HashSet<&'a str>,
pub violet: Vec<&'a str>, pub violet: HashSet<&'a str>,
pub unknown: Vec<&'a str>, pub unknown: HashSet<&'a str>,
} }
pub struct Descriptors<T: Write> { pub struct Descriptors<T: Write> {
+9 -8
View File
@@ -1,3 +1,4 @@
use std::collections::HashSet;
use std::io::{BufRead, BufReader}; use std::io::{BufRead, BufReader};
use std::{fs, str}; use std::{fs, str};
@@ -55,10 +56,10 @@ fn divide_body_by_coalition(body: &Vec<String>) -> lib::BodiesByCoalition {
let mut continued = false; let mut continued = false;
let mut line_type = LineType::Unknown; let mut line_type = LineType::Unknown;
let mut coalitions = lib::IDs { let mut coalitions = lib::IDs {
blue: Vec::new(), blue: HashSet::new(),
red: Vec::new(), red: HashSet::new(),
violet: Vec::new(), violet: HashSet::new(),
unknown: Vec::new(), unknown: HashSet::new(),
}; };
for line in body { for line in body {
let result = process_line(continued, &mut coalitions, line, line_type); let result = process_line(continued, &mut coalitions, line, line_type);
@@ -120,13 +121,13 @@ fn get_id_from_line(line: &str) -> &str {
fn assign_id_to_coalitions<'a>(coalitions: &mut lib::IDs<'a>, line: &'a str, id: &'a str) { fn assign_id_to_coalitions<'a>(coalitions: &mut lib::IDs<'a>, line: &'a str, id: &'a str) {
if line.contains("Color=") { if line.contains("Color=") {
if line.contains("Color=Blue") { if line.contains("Color=Blue") {
coalitions.blue.push(id); coalitions.blue.insert(id);
} else if line.contains("Color=Red") { } else if line.contains("Color=Red") {
coalitions.red.push(id); coalitions.red.insert(id);
} else if line.contains("Color=Violet") { } else if line.contains("Color=Violet") {
coalitions.violet.push(id); coalitions.violet.insert(id);
} else { } else {
coalitions.unknown.push(id); coalitions.unknown.insert(id);
} }
} }
} }