After reading Rust book chapter 8

rust

Vector

// (1)
let v: Vec<i32> = Vec::new();

// (2)
let v = vec![1, 2, 3];

// (3)
let mut v = Vec::new();

v.push(5);
v.push(6);
v.push(7);
v.push(8);


벡터로부터 값 읽기

let v = vec![1, 2, 3, 4, 5];

// (1)
let third: &i32 = &v[2];

println!("The third element is {}", third);

// (2)
match v.get(2) {
    Some(third) => println!("The third element is {}", third),
    None => println!("There is no third element."),
}

// (3)
let mut v = vec![1, 2, 3, 4, 5];
let first = &v[0];

v.push(6);
println!("The first element is: {}", first);


벡터의 값 순회하기

// (1)
let v = vec![100, 32, 57];
for i in &v {
    println!("{}", i);
}

// (2)
let mut v = vec![100, 32, 57];
for i in &mut v {
    *i += 50;
}


벡터에 enum을 통해 여러 타입 저장하기

enum SpreadsheetCell {
    Int(i32),
    Float(f64),
    Text(String),
}

let row = vec![
    SpreadsheetCell::Int(3),
    SpreadsheetCell::Text(String::from("blue")),
    SpreadsheetCell::Float(10.12),
];



String

// (1)
let mut s = String::new();

// (2)
let data = "초기값";
let s = data.to_string();

// (3)
let s = String::from("초기값");


문자열 수정하기

// (1)
let mut s1 = String:from("foo");
let s2 = "bar";

s1.push_str(s2);
println!("s2: {}", s2);

// (2)
let s1 = String::from("hello, ");
let s2 = String::from("world!");
let s3 = s1 + &s2;

// (3)
let s1 = String::from("tic");
let s2 = String::from("tac");
let s3 = String::from("toe");
let s = format!("{}-{}-{}", s1, s2, s3);


문자열의 인덱스

// (1)
let len = String::from("Hola").len();

// (2)
let len = String::from("안녕하세요").len();

// (3)
[236, 149, 136, 235, 133, 149, 237, 149, 152, 236, 132, 184, 236, 154, 148]
['안', '녕', '하', '세', '요']
["안", "녕", "하", "세", "요"]

// (4)
let hello = "안녕하세요";
let s = &hello[0..3];


문자열 순회

// (1)
for c in "안녕하세요".chars() {
  println!("{}", c);
}

// (2)
for b in "안녕하세요".bytes() {
  println("{}", b);
}


Strings Are Not So Simple



Hash Map

// (1)
use std:collections::HashMap;

let mut scores = HashMap::new();

scores.insert(String::from("블루"), 10);
scores.insert(String::from("레드"), 50);

// (2)
use std::collections::HashMap;

let teams = vec![String::from("블루"), String::from("레드")];
let initial_scores = vec![10, 50];
let mut scores: HashMap<_, _> = teams.into_iter().zip(initial_scores.into_iter()).collect();


해시맵과 소유권

use std::collections::HashMap;

let field_name = String::from("Favorite color");
let field_value = String::from("Blue");

let mut map = HashMap::new();
map.insert(field_name, field_value);
// field_name and field_value are invalid at this point
// try using them and see what compiler error you get!


해시맵 값 접근/수정하기

use std::collections::HashMap;

let mut scores = HashMap::new();

scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);

let team_name = String::from("Blue");
let score = scores.get(&team_name);

for (k, v) in &scores {
  println!("{}: {}", k, v);
}

// (1)
scores.insert(String::from("Red"), 10);
scores.insert(String::from("Red"), 20);

// (2)
scores.entry(String::from("Green")).or_insert(50);
scores.entry(String::from("Green")).or_insert(60);

// (3)
use std::collections::HashMap;

let text = "hello world wonderful world";
let mut map = HashMap::new();

for word in text.split_whitespace() {
  let count = map.entry(word).or_insert(0);
  *count += 1;
}

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