サーチ…


配列

配列は、単一の型のオブジェクトの静的サイズのスタック割り当てのリストです。

配列は、通常、角括弧で囲まれた型の要素のリストを囲むことで作成されます。配列の型は特殊な構文で表されます: [T; N]ここで、 Tはその要素の型であり、 Nそのカウントであり、どちらもコンパイル時に知られていなければならない。

たとえば、 [4u64, 5, 6]は3要素配列の[u64; 3] 。注: 5および6は、タイプがu64であると推測されます。


fn main() {
    // Arrays have a fixed size.
    // All elements are of the same type.
    let array = [1, 2, 3, 4, 5];

    // Create an array of 20 elements where all elements are the same.
    // The size should be a compile-time constant.
    let ones = [1; 20];

    // Get the length of an array.
    println!("Length of ones: {}", ones.len());

    // Access an element of an array.
    // Indexing starts at 0.
    println!("Second element of array: {}", array[1]);

    // Run-time bounds-check.
    // This panics with 'index out of bounds: the len is 5 but the index is 5'.
    println!("Non existant element of array: {}", array[5]);
}

制限事項

配列(またはスライス)のパターンマッチングは、安定した錆( #23121スライスパターン参照)ではサポートされていません。

Rustはタイプレベルの数値の総称をサポートしていません( RFC#1657参照)。したがって、(すべてのサイズの)すべての配列の特性を単純に実装することはできません。結果として、標準的な形質は、限られた数の要素までの配列に対してのみ実装されます(最後にチェックされ、32までが含まれます)。より多くの要素を持つ配列はサポートされていますが、標準的な特性を実装していません( ドキュメントを参照)。

これらの規制は将来的には解除されることが望まれる。

ベクトル

ベクトルは本質的に、単一の型のオブジェクトのヒープ割り当てされた動的サイズのリストへのポインタです。


fn main() {
    // Create a mutable empty vector
    let mut vector = Vec::new();

    vector.push(20);
    vector.insert(0, 10); // insert at the beginning

    println!("Second element of vector: {}", vector[1]); // 20

    // Create a vector using the `vec!` macro
    let till_five = vec![1, 2, 3, 4, 5];

    // Create a vector of 20 elements where all elements are the same.
    let ones = vec![1; 20];

    // Get the length of a vector.
    println!("Length of ones: {}", ones.len());

    // Run-time bounds-check.
    // This panics with 'index out of bounds: the len is 5 but the index is 5'.
    println!("Non existant element of array: {}", till_five[5]);
}

スライス

スライスはオブジェクトのリストへのビューであり、タイプTのオブジェクトのスライスを示すタイプ[T]を持っています。

スライスはサイズの小さい型であるため、ポインタの後ろでしか使用できません。 (文字列の世界的な類推: str列スライスとも呼ばれるstrもサイズが設定されていません)

配列は強制的にスライスになり、ベクトルはスライスに逆参照できます。したがって、両方の方法にスライス方法を適用することができます。 (文字列の世界の類推: strString[T]Vec<T>です)。

fn main() {
    let vector = vec![1, 2, 3, 4, 5, 6, 7, 8];
    let slice = &vector[3..6];
    println!("length of slice: {}", slice.len()); // 3
    println!("slice: {:?}", slice); // [4, 5, 6]
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow