Rust複合型とコレクション

### 配列

fn main() {
	let data = [12, 34, 56, 78, 90];
	let mut ans = 0;
	for item in data {
		ans += item;
	}
	println!("データの合計は、{}です。", ans);
}

配列の型は[型;個数]となる。

### タプル

fn main() {
	let taro = ("Taro", 39, true);
	let hanako = ("Hanako", 28, false);
	println!("{:?}", taro);
	println!("{:?}", hanako);
	println!("name:{}, {}", taro.0, hanako.0);
	println!("age:{}, {}", taro.1, hanako.1);
	println!("male?:{}, {}", taro.2, hanako.2);
}

### ベクター型
同じ型の値を多数保管
空のVecを作成: Vec::new()
初期値を持つvecを作成: vec![値1, 値2, …]
値を取り出す: [番号], .get(番号), .get(番号).unwrap()
値を追加: .push(値)

fn main(){
	let mut data = Vec::new();
	data.push(123);
	data.push(456);
	data.push(789);
	println!("0:{}, 1:{}, 2:{}", data[0], data[1], data.get(2).unwrap());
}

### Vecの値を繰り返し処理する
ベクターはコレクションである

fn main(){
	let data = vec![123, 456, 789];
	let mut result = 0;
	for item in data {
		result += item;
	}
	println!("データの合計は、{}です。", result);
}

途中に値を挿入したい場合はinsertを使う
.insert(番号、値)

fn main(){
	let mut data = vec![123, 456, 789];
	data.remove(1);
	data.insert(2, 100);
	println!("{:?}", data);
}

### 名前で値を管理するHashMap
std::collectionsというモジュールで管理されている
use std::collections::HashMMap;

HashMapの作成:HashMap::new();
値を追加: .insert(名前, 値);
値を削除: .remove(名前);

use std::collections::HashMap;

fn main(){
	let mut map = HashMap::new();
	map.insert(String::from("first"), 123);
	map.insert(String::from("second"), 456);
	map.insert(String::from("third"), 789);
	map.remove("second");
	println!("{:?}", map);
}

HashMapは順不同、テキストリテラルではなくStringでテキストを指定
.get(名前).unwrap();

use std::collections::HashMap;

fn main(){
	let mut map = HashMap::new();
	map.insert(String::from("first"), 123);
	map.insert(String::from("second"), map["first"] * 2);
	map.insert(String::from("third"), map.get("first").unwrap() + map.get("second").unwrap());

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

HashMapの繰り返し処理
L for(ky, val) in map

use std::collections::HashMap;

fn main(){
	let mut map = HashMap::new();
	map.insert(String::from("first"), 123);
	map.insert(String::from("second"), 456);
	map.insert(String::from("third"), 789);
	let mut result = 0;
	for (ky, val) in map {
		println!("{}: {}.", ky, val);
		result += val;
	}

	println!("total: {}.", result);
}

### String型のテキスト

fn main() {
	let s1 = String::new();
	let s2 = String::from("Hello");
	let s3 = "World";
	let s4 = s1 + &s2 + &s3;
	println!("{}", s4);
}
fn main() {
	let mut s1 = String::new();
	s1.push_str("Hello");
	s1.push_str("World!");
	println!("{}", s1);
}
fn main() {
	let mut s1 = String::from("Hello,World!");
	s1.insert_str(6, " Rust ");
	s1.insert(7, '*');
	s1.insert(12, '*');
	s1.remove(5);
	println!("{}", s1);
}

### 文字の部分取得
レンジを使って文字列の中から一部分だけ取り出せる

fn main() {
	let s1 = String::from("Hello,Rust World!");
	let s2 = &s1[0..5];
	let s3 = &s1[6..10];
	let s4 = &s1[11..16];
	let s5 = String::new() + s4 + s3 + s2;
	println!("{}", s5);
}