Rust-slices
提供:Dev Guides
錆-スライス
スライスは、メモリブロックへのポインタです。 スライスを使用して、連続したメモリブロックに格納されているデータの一部にアクセスできます。 配列、ベクトル、文字列などのデータ構造で使用できます。 スライスはインデックス番号を使用してデータの一部にアクセスします。 スライスのサイズは実行時に決定されます。
スライスは、実際のデータへのポインターです。 関数への参照によって渡されます。これは借用とも呼ばれます。
たとえば、スライスを使用して文字列値の一部をフェッチできます。 スライスされた文字列は、実際の文字列オブジェクトへのポインタです。 したがって、文字列の開始インデックスと終了インデックスを指定する必要があります。 配列と同様に、インデックスは0から始まります。
構文
let sliced_value = &data_structure[start_index..end_index]
最小インデックス値は0で、最大インデックス値はデータ構造のサイズです。 end_indexは最終文字列に含まれないことに注意してください。
次の図は、9文字のサンプル文字列_Tutorials_を示しています。 最初の文字のインデックスは0で、最後の文字のインデックスは8です。
次のコードは、文字列から5文字を取得します(インデックス4から開始)。
fn main() {
let n1 = "Tutorials".to_string();
println!("length of string is {}",n1.len());
let c1 = &n1[4..9];
//fetches characters at 4,5,6,7, and 8 indexes
println!("{}",c1);
}
出力
length of string is 9
rials
図-整数配列のスライス
main()関数は、5つの要素を持つ配列を宣言します。 * use_slice()*関数を呼び出して、3つの要素のスライス(データ配列を指す)を渡します。 スライスは参照渡しされます。 use_slice()関数は、スライスの値とその長さを出力します。
fn main(){
let data = [10,20,30,40,50];
use_slice(&data[1..4]);
//this is effectively borrowing elements for a while
}
fn use_slice(slice:&[i32]) {
//is taking a slice or borrowing a part of an array of i32s
println!("length of slice is {:?}",slice.len());
println!("{:?}",slice);
}
出力
length of slice is 3
[20, 30, 40]
可変スライス
- &mut *キーワードを使用して、スライスを可変としてマークできます。
fn main(){
let mut data = [10,20,30,40,50];
use_slice(&mut data[1..4]);
//passes references of
20, 30 and 40
println!("{:?}",data);
}
fn use_slice(slice:&mut [i32]) {
println!("length of slice is {:?}",slice.len());
println!("{:?}",slice);
slice[0] = 1010;//replaces 20 with 1010
}
出力
length of slice is 3
[20, 30, 40]
[10, 1010, 30, 40, 50]
上記のコードは、可変スライスを_use_slice()_関数に渡します。 この関数は、元の配列の2番目の要素を変更します。