你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Q# 支持对数组项和 struct 类型的项访问。 在这两种情况下,访问都是只读的;如果不使用 复制和更新表达式创建新实例,则无法更改该值。
数组项访问和数组切片
给定数组表达式和类型为 Int 或 Range的表达式,可以使用由 [ 和 ]组成的数组项访问运算符形成新表达式。
如果括号内的表达式的类型为 Int,则新表达式包含该索引处的数组项。
例如,如果 arr 的类型为 Double[],并且包含五个或更多项,则 arr[4] 是 Double类型的表达式。
如果括号内的表达式的类型为 Range,则新表达式包含由指定 Range编制索引的所有项的数组。 如果 Range 为空,则生成的数组为空。
例如,
let arr = [10, 11, 36, 49];
let ten = arr[0]; // contains the value 10
let odds = arr[1..2..4]; // contains the value [11, 49]
let reverse = arr[...-1...]; // contains the value [49, 36, 11, 10]
在示例中的最后一行中,为了方便起见,省略了范围的开始和结束值。 有关详细信息,请参阅 上下文表达式。
如果数组表达式不是简单的标识符,则必须用括号括起来才能提取项或切片。
例如,如果 arr1 和 arr2 都是整数数组,则串联中的项将表示为 (arr1 + arr2)[13]。 有关详细信息,请参阅 优先级和关联性。
Q# 中的所有数组都是从零开始的,即数组 arr 的第一个元素始终 arr[0]。
如果在索引或用于切片的索引之一超出数组边界,例如,如果索引小于零或大于或等于数组的长度,则会在运行时引发异常。
结构类型的项访问
可通过两种方式访问 struct 中包含的项:
- 按引用使用句点 (
.) - 通过使用解构,使用
unwrap(!) 运算符。
例如,给定结构 Complex
struct Complex {
Real : Double,
Imaginary : Double,
}
// create an instance of type Complex
let complex = Complex(1., 0.);
// item access via deconstruction
let (re, _) = complex!;
// item access via name reference
let im = complex.Imaginary;
通过解构进行访问使用解包运算符(!)。 解包运算符返回所有包含项的元组,其中元组的形状与声明中定义的元组匹配,而单个项元组与项本身等效(请参阅本部分 )。
! 运算符 优先级低于这两个项访问运算符 优先级,但优先级高于任何其他运算符。 有关优先级的完整列表,请参阅 优先级和关联性。
有关析构语法的详细信息,请参阅 变量声明和重新分配。