Rust教學
Rust下載和安裝
Rust簡介
Rust Hello World
Rust的特點
Rust註釋
Rust開發環境安裝
Rust文檔
Rust第一個程序
Rust格式化打印
Rust調試
Rust顯示
測試用例:列表
Rust格式化
Rust原語
Rust常量和運算符
Rust元組
Rust數組和切片
Rust自定義類型
Rust結構
Rust可視性
Rust枚舉
Rust常量
Rust變量綁定
Rust變量綁定-可變性
Rust變量綁定-範圍和陰影
Rust變量綁定-聲明
Rust類型轉換
Rust類型轉換 - 字面量
Rust類型轉換-推導
Rust類型轉換 - 別名
Rust表達式
Rust if/else語句
Rust循環
Rust嵌套和標籤
Rust while循環
Rust for和範圍
Rust匹配/match
Rust匹配析構元組
Rust解構枚舉
Rust指針和引用
Rust解構結構
Rust Guards
Rust綁定
Rust if let
Rust while let
Rust函數
Rust方法
Rust閉包
Rust捕捉
Rust作爲輸入參數
Rust匿名類型
Rust輸入函數
Rust作爲輸出參數
Rust切片
切片(Slice)是一種沒有所有權的數據類型。 切片引用連續的內存分配而不是整個集合。 它允許安全,高效地訪問數組而無需複製。 切片不是直接創建的,而是從現有變量創建的。 切片由長度組成,並且可以是可變的或不可變的。 切片的行爲與數組相同。
字符串切片
字符串切片指的是字符串的一部分。 切片看起來像:
let str=String::from("Yiibai.com tutorial");
let yiibai=&str[0..10];
let tutorial=&str[11,18];
如果想要取一部分字符串,而不是整個字符串。 [start..end]
語法是一個從開始但不包括結束的範圍。 因此,可以通過指定括號內的範圍來創建切片,例如[start..end]
,其中start
指定元素的起始位置,end
比切片中的最後一個位置多一個。如果想要包含字符串的結尾,那麼必須使用..=
而不是..
。
let str= String::from("yiibai.com tutorial");
let yiibai = &str[0..=9];
let tutorial= &str[11..=18] ;
圖解表示:
如果要從0
開始索引,那麼也可以刪除起始索引。看起來如下:
let str= String::from("hello world");
let hello = &str[0..5];
let hello=&str[..5];
如果slice
包含字符串的最後一個字節,那麼可以刪除起始索引。看起來如下:
let str= String::from("hello world") ;
let hello=&str[6..len];
let world = &str[6..];
下面來看一個字符串切片的簡單示例:
fn main(){
let str=String::from("Yiibai.com tutorial");
let yiibai=&str[..=9];
println!("first word of the given string is {}",yiibai);
}
執行上面示例代碼,得到以下結果 -
first word of the given string is Yiibai.com
字符串切片是文字
字符串文字存儲在二進制文件中,字符串文字僅作爲字符串切片。 如下:
let str = "Hello Yiibai" ;
str
的類型是&str
,它是指向二進制文件特定點的切片。 字符串文字是不可變的,&str
是不可變的引用。
字符串切片作爲參數
如果有一個字符串切片,那麼可以直接傳遞它作爲參數。將字符串切片作爲參數傳遞給函數,而不是傳遞引用,以使API更通用和有用,而不會失去其功能。
fn main()
{
let str= String:: from("Computer Science");
let first_word= first_word(&str[..]); //first_word function finds the first word of the string.
let s="Computer Science" ; //string literal
let first_word=first_word(&s[..]); // first_word function finds the first word of the string.
let first_word=first_word(s) ; //string slice is same as string literal. Therefore, it can also be written in this way also.
}
其他切片
數組也可以視爲切片。它們的行爲類似於字符串切片。 切片的類型爲[&i32]
。 它們通過將引用存儲爲第一個元素並將長度存儲爲第二個元素,類似於字符串切片。
考慮下面一個數組:
let arr = [100,200,300,400,500]; // array initialization
let a = &arr[1..=3]; // retrieving second,third and fourth element
下面來看一個簡單的例子。
fn main()
let arr = [100,200,300,400,500,600];
let mut i=0;
let a=&arr[1..=3];
let len=a.len();
println!("Elements of 'a' array:");
while i<len
{
println!("{}",a[i]);
i=i+1;
}
}
執行上面示例代碼,得到以下結果 -
Elements of 'a' array:
200
300
400