一般社団法人 全国個人事業主支援協会

COLUMN コラム

各データ構造はヒープ領域にデータを確保する為、実行時に要素数の変更等が行える。

ベクタ

特定のデータ型を挿入可能な可変長のリスト。

let vector: Vec<i32> = Vec::new();
let mut vector = vec![1, 2, 3]; // マクロを利用した初期化
// 更新する際にはpushメソッドを使用する
vector.push(4);
vector.push(5);
vector.push(6);
// forによる値の捜査
vector.push(7);
for i in &vector {
    println!("{:?}", i);
}
// enumを使用し、異なる型を挿入することも可能
#[derive(Debug)]
enum Type {
    A,
    B
};
let v = vec![Type::A, Type::B];
for i in &v {
    println!("{:?}", i);
}

文字列型(String)

プログラムへ直書きされる文字列リテラルと異なり、ヒープに格納される標準ライブラリ提供のコレクション。

// Vec同様::new()で新規生成可能
let mut s = String::new();
// 文字列リテラルからto_string()メソッドを使用することでも新規生成できる
let s = "Hello String.".to_string();
// String::from()関数を使用する事でも文字列リテラルから生成出来る
let s = String::from("Hello String.");
// UTF-8エンコードされているので日本語も使用できる
let s = String::from("こんにちは");
// push_strメソッドで文字列を追加する
let mut s = String::from("hoge");
s.push_str("fuga");
// pushメソッドを使用すると1文字のみ追加できる
let mut s = String::from("ww");
s.push('w');
// + 演算子で文字列を連結できる
let s1 = String::from("Hello ");
let s2 = String::from("world!");
let s3 = s1 + &s2; // 連結する側は参照 s1の所有権は消える
// 複雑な文字列連結はformat!マクロを使用する
let s1 = String::from("one");
let s2 = String::from("two");
let s3 = String::from("three");
let s = format!("{}-{}-{}", s1, s2, s3);
// Rustには文字列への添え字は使用できない
let s1 = String::from("hello");
// let h = s1[0]; // 使用できない
// 文字列から特定のあ値を取り出す場合、スライスを使用する
let h = &s1[0..1];
// chars()メソッドから文字毎の配列を取得できる
for c in s1.chars() {
    println!("{}", c);
}
The following two tabs change content below.

WATANABE REN

千葉県在住のエンジニアです。最近はPythonやってます。

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア