Архив метки: rust

Rust — увеличить по счетчику значение в HashMap

Я использовал хэш-таблицу в качестве дедубликатора имени ключа. Аналог ассоциативного массива в PHP, когда есть имя ключа и его значение и необходимо добавлять новые значения по имени ключа, при этом нам не нужно каждый раз дублировать эти имена ключей- они должны быть уникальными. Но при этом нам нужно для каждого ключа увеличить его значение, например на +1.

use std::collections::HashMap;
fn main() { 
     
let mut fruits:HashMap<String, i32> = HashMap::new();  

fruits.insert(String::from("sds"), 122); 

fruits.insert(String::from("qqqq"), 22);    

fruits.entry("sds".to_string()).and_modify(|count| *count += 1).or_insert(0);  

let first_fruit = fruits.get("sds"); //123    

println!("{:?}", first_fruit);}

Пример на Replit тут

Rust — счетчик в ведущими нулями

Задача:  вывести счетчик с ведущими нулями, пример 0001, 0002 и т.д.

Задача не сложная, но не стандартная и предполагает несколько вариантов реализации. Мой вариант реализован на том, что мы считаем длину стандартного int счетчика и в зависимости от нее добавляем перед ним нужно количество нулей, которые у нас являются уже строкой.

fn main(){
  
  (1..1002).for_each(|n| {
        let _str: String = n.to_string();
        let lenght = _str.len();    
        let mut _zero = String::from("000");

        if lenght == 2{
            _zero = String::from("00");
        }
        else if lenght == 3{
            _zero = String::from("0");
        }
        else if lenght == 4{
            _zero = String::from("");
        }
    
      println!("{}{}",_zero, n);
});
  
    
}

Реализация этого же через match:

fn main(){
  
  (1..1002).for_each(|n| {
        let _str: String = n.to_string();
        let lenght = _str.len();    
        
    match lenght {
        2 => {println!("00{}", n);}
        3 => {println!("0{}", n);}
        4 => {println!("{}", n);}
        _ => {println!("000{}", n);}
    }
        
    
});
  
    
}

Rust — вырезать подстроку с начала и конца строки

fn main() {

    let str = "/app/dima/var/test_log.stat.json";  
    //cut "/app/dima/var/"
     let slice = &str[14..];
    //cut ".stat.json"
     let len = slice.len() - 10;
    let substr = &slice[..len];  
    
     println!("{}", substr);
}

Логика такая:

  1. сначала удаляем путь — он содержит в данном случае постоянную длину.
  2. удаляем путь
  3. вычисляем длину строки
  4. удаляем длину подстроки .stat.json

Пример работающего кода

Rust — вывести тип переменной

/*
show me type of variable
use example: println!("{}",variable.type_name());
*/
pub trait AnyExt {
    fn type_name(&self) -> &'static str;
}

impl<T> AnyExt for T {
    fn type_name(&self) -> &'static str {
        std::any::type_name::<T>()
    }
}

fn main() {
let num = 1; 
println!("{}",num.type_name());
}

Результат в данном случае будет :

i32

Rust — кросскомпиляция. Посмотреть набор инструментов.

Для кросскомпиляции в Rust нужно установить набор библиотек, необходимых для компиляции на определенной платформе.

Чтобы посмотреть установленные набор : rustup show

Чтобы добавит например musl , то делаем rustup target add x86_64-unknown-linux-musl

Смотрим rustup show

$ rustup show
.Default host: x86_64-unknown-linux-gnu
rustup home:  /home/dima/.rustup

installed targets for active toolchain
--------------------------------------

x86_64-unknown-linux-gnu
x86_64-unknown-linux-musl

active toolchain
----------------

stable-x86_64-unknown-linux-gnu (default)
rustc 1.40.0 (73528e339 2019-12-16)

Теперь компилируем

$ cargo run --target=x86_64-unknown-linux-musl
   Compiling cfg-if v0.1.10
   Compiling ppv-lite86 v0.2.6
   Compiling libc v0.2.66
   Compiling getrandom v0.1.13
   Compiling c2-chacha v0.2.3
   Compiling rand_core v0.5.1
   Compiling rand_chacha v0.2.1
   Compiling rand v0.7.2
   Compiling read_file v0.1.0 (/home/dima/Rust/read_file)
    Finished dev [unoptimized + debuginfo] target(s) in 36.55s
     Running `target/x86_64-unknown-linux-musl/debug/read_file`
Random u8: 252
Random u16: 4832
Random u32: 141195676
Random i32: -1677746107
Random float: 0.22141390568216823