Skip to content

Instantly share code, notes, and snippets.

@tivrfoa
Last active December 2, 2021 23:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tivrfoa/01b51bb4d10e8d615374ad8d2f3de1be to your computer and use it in GitHub Desktop.
Save tivrfoa/01b51bb4d10e8d615374ad8d2f3de1be to your computer and use it in GitHub Desktop.
Rust HashMap macro
// https://leetcode.com/problems/roman-to-integer
use lazy_static::lazy_static;
use std::collections::HashMap;
macro_rules! map {
($( $t: expr),*) => {{
let mut map = HashMap::new();
$( map.insert($t.0, $t.1); )*
map
}}
}
lazy_static! {
static ref LETTERS: HashMap<char, i32> = map!(
('I', 1),
('V', 5),
('X', 10),
('L', 50),
('C', 100),
('D', 500),
('M', 1000),
('a', 4),
('b', 9),
('c', 40),
('d', 90),
('e', 400),
('f', 900)
);
}
impl Solution {
pub fn roman_to_int(s: String) -> i32 {
let s = s.as_str();
let s = s.replace("CM", "f");
let s = s.replace("CD", "e");
let s = s.replace("XC", "d");
let s = s.replace("XL", "c");
let s = s.replace("IX", "b");
let s = s.replace("IV", "a");
s.chars().fold(0, |acc, c| acc + LETTERS.get(&c).unwrap())
}
}
use std::collections::HashMap;
macro_rules! hashmap {
($( $key: expr => $val: expr ),*) => {{
let mut map = HashMap::new();
$( map.insert($key, $val); )*
map
}}
}
macro_rules! map {
($( $t: expr),*) => {{
let mut map = HashMap::new();
$( map.insert($t.0, $t.1); )*
map
}}
}
fn get_map() -> HashMap<char, i32> {
hashmap!('a' => 1, 'b' => 2)
}
fn main() {
let m1 = hashmap!('a' => 1, 'b' => 2);
println!("{:?}", m1);
let m1 = map!(('a', 1), ('b', 2));
println!("{:?}", m1);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment