在上一篇文章中,数组你学习到了 Rust 中的和元 标量数据类型。它们是基础整型、浮点数、系列字符和布尔值。中的组
在本文中,数组我们将会看看 Rust 编程语言中的和元复合数据类型。
复合数据类型可以在一个变量中存储多个值。这些值可以是系列相同的标量数据类型,也可以是中的组不同的标量数据类型。
Rust 编程语言中有两种这样的数组数据类型:
让我们了解一下它们吧!
Rust 编程语言中的数组具有以下特性:
创建数组的语法如下:
// 无类型声明let variable_name = [element1, element2, ..., elementn];// 有类型声明let variable_name: [data_type; array_length] = [element1, element2, ..., elementn];
数组中的元素是在方括号中声明的。要访问数组的元素,需要在方括号中指定要访问的索引。
来让我们看一个例子来更好地理解这个。
fn main() { // 无类型声明 let greeting = ['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']; // 有类型声明 let pi: [i32; 10] = [1, 4, 1, 5, 9, 2, 6, 5, 3, 5]; for character in greeting { print!("{ }", character); } println!("\nPi: 3.1{ }{ }{ }{ }", pi[0], pi[1], pi[2], pi[3]);}
这里,我定义了一个字符数组和另一个存储 i32
类型的值的数组。greeting
数组以单独字符的形式存储了字符串 "Hello world!"
的字符。pi
数组以单独数字的形式存储了圆周率小数点后的前 10 位数字。
然后,我使用 for
循环打印了 greeting
数组的每个字符。(我很快就会讲到循环。)然后,我打印了 pi
数组的前 4 个值。
Hello world!Pi: 3.11415
如果你想创建一个数组,其中每个元素都是 y,并且出现 x 次,你可以使用以下快捷方式在 Rust 中实现:
let variable_name = [y; x];
来看一个演示……
fn main() { let a = [10; 5]; for i in a { print!("{ i} "); } println!("");}
我创建了一个变量 a
,它的长度为 5。数组中的每个元素都是 '10'。我通过使用 for
循环打印数组的每个元素来验证这一点。
它的输出如下:
10 10 10 10 10
🤸 作为练习,尝试创建一个长度为 x 的数组,然后尝试访问数组的第 x+1 个元素。看看会发生什么。
Rust 中的元组具有以下特性:
创建元组的语法如下:
// 无类型声明let variable_name = (element1, element2, ..., element3);// 有类型声明let variable_name: (data_type, ..., data_type) = (element1, element2, ..., element3);
元组的元素写在圆括号中。要访问元素,使用点运算符,后跟该元素的索引。
fn main() { let a = (38, 923.329, true); let b: (char, i32, f64, bool) = ('r', 43, 3.14, false); println!("a.0: { }, a.1: { }, a.2: { }", a.0, a.1, a.2); println!("b.0: { }, b.1: { }, b.2: { }, b.3: { }", b.0, b.1, b.2, b.3); // 元组解构 let pixel = (50, 0, 200); let (red, green, blue) = pixel; println!("red: { }, green: { }, blue: { }", red, green, blue);}
在上面的代码中,我在第 2 行和第 3 行声明了两个元组。它们只包含我当时想到的随机值。但是仔细看,两个元组中每个元素的数据类型都不同。然后,在第 5 行和第 6 行,我打印了两个元组的每个元素。
在第 9 行,我声明了一个名为 pixel
的元组,它有 3 个元素。每个元素都是组成像素的颜色红色、绿色和蓝色的亮度值。这个范围是从 0 到 255。所以,理想情况下,我会声明类型为 (u8, u8, u8)
,但是在学习代码时不需要这样优化 ; )
然后,在第 10 行,我“解构”了 pixel
元组的每个值,并将其存储在单独的变量 red
、green
和 blue
中。然后,我打印了 red
、green
和 blue
变量的值,而不是 pixel
元组的值。
让我们看看输出……
a.0: 38, a.1: 923.329, a.2: trueb.0: r, b.1: 43, b.2: 3.14, b.3: falsered: 50, green: 0, blue: 200
看起来不错 : )
准确的来说,切片Slice
一个切片由三个元素组成:
..
或 ..=
)接下来是数组切片的一个示例:
fn main() { let my_array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; let my_slice = &my_array[0..4]; for element in my_slice { println!("{ element}"); }}
就像 C 和 C++ 一样,&
用于存储变量的引用(而不是原始指针)。所以 &my_array
意味着对变量 my_array
的引用。
然后,来看看切片。切片由 [0..4]
表示。这里,0
是切片开始的索引。而 4
是切片结束的索引。这里的 4 是一个非包含索引。
这是程序输出,以更好地理解正在发生的事情:
0123
如果你想要一个 包含 范围,你可以使用 ..=
作为包含范围的切片运算符。
fn main() { let my_array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; let my_slice = &my_array[0..=4]; for element in my_slice { println!("{ element}"); }}
现在,这个范围是从第 0 个元素到第 4 个元素,下面是输出来证明这一点:
01234
本文讲到了 Rust 编程语言中的复合数据类型。你学习了如何声明和访问存储在数组和元组类型中的值。此外,你还了解了切片“类型”,以及如何解构元组。
在下一章中,你将学习如何在 Rust 程序中使用函数。敬请关注。
责任编辑:庞桂玉 来源: Linux中国 Rust数组元组(责任编辑:百科)
青岛中远海运为中小企业减免租金3200余万元 切实减轻企业负担
总投资420.7亿元!福省迄今一次性投资最大的中外合资项目正式落地
中国即食面行业渗透率高 摩通降康师傅(0322.HK)目标价至16.6港元
国家统计局:10月份货物进出口总额33357亿元 出口19408亿元