[玩转系统] 数组
作者:精品下载站 日期:2024-12-14 02:55:54 浏览:13 分类:玩电脑
数组
9.1 简介
PowerShell 支持一维或多维数组,每个维度具有零个或多个元素。在维度内,元素从零开始按升序整数顺序编号。任何单个元素都可以通过数组下标运算符 []
访问(第 7.1.4 节)。数组中的维数称为其秩。
元素可以包含任何类型的值,包括数组类型。具有一个或多个值为任意数组类型的元素的数组称为交错数组。 多维数组具有多个维度,在这种情况下,一个维度的每一行中的元素数量是相同的。锯齿状数组的元素可以包含多维数组,反之亦然。
多维数组按行优先顺序存储。数组中元素的数量称为该数组的长度,它在创建数组时是固定的。因此,可以使用表达式 访问长度为 N 的一维数组 A 中的元素(即下标) A[0],A[1],...,A[N-1]
。二维数组 B 中的元素具有 M 行,每行具有 N 列,可以使用表达式 进行访问B[0,0]、B[0,1]、...、B[0,N-1]、B[1,0]、B[1,1]、...、B[1,N -1],...,B[M-1,0],B[M-1,1],...,B[M-1,N-1]
。对于具有三个或更多维度的数组,依此类推。
默认情况下,数组是多态的;即,它的元素不需要全部具有相同的类型。例如,
$items = 10,"blue",12.54e3,16.30D # 1-D array of length 4
$items[1] = -2.345
$items[2] = "green"
$a = New-Object 'object[,]' 2,2 # 2-D array of length 4
$a[0,0] = 10
$a[0,1] = $false
$a[1,0] = "red"
$a[1,1] = $null
一维数组的类型为 type[]
,二维数组的类型为 type[,]
,3 维数组的类型为 type[, ,]
等,其中 type 是无约束类型数组的对象,或受约束数组的受约束类型(第 9.4 节)。
所有数组类型均派生自 Array 类型(第 4.3.2 节)。
9.2 数组创建
数组是通过数组创建表达式创建的,该表达式具有以下形式:一元逗号运算符 (第 7.2.1 节)、数组表达式 (第 7.1.7 节)、二元逗号运算符(第 7.3 节)、范围运算符(第 7.4 节)或 New-Object cmdlet。
以下是数组创建和使用的一些示例:
$values = 10, 20, 30
for ($i = 0; $i -lt $values.Length; ++$i) {
"`$values[$i] = $($values[$i])"
}
$x = , 10 # x refers to an array of length 1
$x = @(10) # x refers to an array of length 1
$x = @() # x refers to an array of length 0
$a = New-Object 'object[,]' 2, 2 # create a 2x2 array of anything
$a[0, 0] = 10 # set to an int value
$a[0, 1] = $false # set to a boolean value
$a[1, 0] = "red" # set to a string value
$a[1, 1] = 10.50D # set to a decimal value
foreach ($e in $a) { # enumerate over the whole array
$e
}
以下内容写入管道:
$values[0] = 10
$values[1] = 20
$values[2] = 30
10
False
red
10.50
任何未显式初始化的元素的默认初始值都是该元素类型的默认值(即 $false
、零或 $null
)。
9.3 数组串联
任意类型和长度的数组可以通过 + 和 += 运算符连接,这两个运算符都会创建一个新的无约束一维数组。现有数组不变。有关更多信息,请参阅第 7.7.3 节;有关添加到受约束类型数组的讨论,请参阅第 9.4 节。
9.4 约束元素类型
可以通过在数组创建表达式前添加数组类型转换来创建一维数组,使其受到类型约束。例如,
$a = [int[]](1,2,3,4) # constrained to int
$a[1] = "abc" # implementation-defined behavior
$a += 1.23 # new array is unconstrained
创建多维数组的语法需要指定类型,并且该类型将成为该数组的约束类型。然而,通过指定类型object[]
,实际上没有任何限制,因为任何类型的值都可以分配给该类型数组的元素。
连接两个数组(第 7.7.3 节)始终会产生一个不受约束的新数组,即使两个数组都受相同类型的约束也是如此。例如,
$a = [int[]](1,2,3) # constrained to int
$b = [int[]](10,20) # constrained to int
$c = $a + $b # constraint not preserved
$c = [int[]]($a + $b) # result explicitly constrained to int
9.5 数组作为引用类型
由于数组类型是引用类型,因此可以使指定数组的变量来引用任何等级、长度和元素类型的任何数组。例如,
$a = 10,20 # $a refers to an array of length 2
$a = 10,20,30 # $a refers to a different array, of length 3
$a = "red",10.6 # $a refers to a different array, of length 2
$a = New-Object 'int[,]' 2,3 # $a refers to an array of rank 2
数组的赋值涉及到浅拷贝;也就是说,分配给的变量引用同一个数组,不复制该数组。例如,
$a = 10,20,30
">$a<"
$b = $a # make $b refer to the same array as $a
">$b<"
$a[0] = 6 # change value of [0] via $a
">$a<"
">$b<" # change is reflected in $b
$b += 40 # make $b refer to a new array
$a[0] = 8 # change value of [0] via $a
">$a<"
">$b<" # change is not reflected in $b
以下内容写入管道:
>10 20 30<
>10 20 30<
>6 20 30<
>6 20 30<
>8 20 30<
>6 20 30 40<
9.6 数组作为数组元素
数组的任何元素本身都可以是数组。例如,
$colors = "red", "blue", "green"
$list = $colors, (,7), (1.2, "yes") # parens in (,7) are redundant; they
# are intended to aid readability
"`$list refers to an array of length $($list.Length)"
">$($list[1][0])<"
">$($list[2][1])<"
以下内容写入管道:
$list refers to an array of length 3
>7<
>yes<
$list[1]
指的是一个包含 1 个元素的数组,即整数 7,可通过 $list[1][0]
访问,如图所示。将此与以下略有不同的情况进行比较:
$list = $colors, 7, (1.2, "yes") # 7 has no prefix comma
">$($list[1])<"
这里,$list[1]
指的是一个标量,即整数 7,可通过 $list[1]
访问。
考虑下面的例子,
$x = [string[]]("red","green")
$y = 12.5, $true, "blue"
$a = New-Object 'object[,]' 2,2
$a[0,0] = $x # element is an array of 2 strings
$a[0,1] = 20 # element is an int
$a[1,0] = $y # element is an array of 3 objects
$a[1,1] = [int[]](92,93) # element is an array of 2 ints
9.7 负下标
这将在第 7.1.4.1 节中讨论。
9.8 边界检查
这将在第 7.1.4.1 节中讨论。
9.9 数组切片
数组切片是一个不受约束的一维数组,其元素是集合中零个或多个元素的副本。数组切片是通过下标运算符 []
创建的(第 7.1.4.5 节)。
9.10 复制数组
可以使用[Array]::Copy
方法将一组连续的元素从一个数组复制到另一个数组。例如,
$a = [int[]](10,20,30)
$b = [int[]](0,1,2,3,4,5)
[Array]::Copy($a, $b, 2) # $a[0]->$b[0],
$a[1]->$b[1]
[Array]::Copy($a, 1, $b, 3, 2) # $a[1]->$b[3],
$a[2]->$b[4]
9.11 枚举数组
虽然可以通过下标运算符循环访问数组的每个元素,但我们可以使用 foreach 语句枚举该数组的元素。对于多维数组,元素按行优先顺序处理。例如,
$a = 10, 53, 16, -43
foreach ($elem in $a) {
# do something with element via $elem
}
foreach ($elem in -5..5) {
# do something with element via $elem
}
$a = New-Object 'int[,]' 3, 2
foreach ($elem in $a) {
# do something with element via $elem
}
9.12 多维数组展平
多维数组上的某些操作(例如复制(第 7.6.3 节)和串联(第 7.7.3 节))要求该数组展平;即转换为无约束类型的一维数组。生成的数组按行优先顺序呈现所有元素。
考虑以下示例:
$a = "red",$true
$b = (New-Object 'int[,]' 2,2)
$b[0,0] = 10
$b[0,1] = 20
$b[1,0] = 30
$b[1,1] = 40
$c = $a + $b
$c
指定的数组包含元素“red”、$true
、10、20、30 和 40。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag