一、PowerShell数组:你的数据收纳箱

在PowerShell中,数组就像是一个可以装下各种数据的收纳箱。无论是数字、字符串,还是复杂的对象,都可以轻松塞进去。

# 创建一个包含数字的数组
$numbers = 1, 2, 3, 4, 5
# 创建一个包含字符串的数组
$fruits = "Apple", "Banana", "Orange"
# 混合类型数组
$mixed = 1, "Hello", $true, (Get-Date)

# 访问数组元素
Write-Host "第二个水果是: $($fruits[1])"  # 输出: Banana
# 遍历数组
$numbers | ForEach-Object { $_ * 2 }  # 每个数字乘以2

数组的优势在于简单易用,特别适合处理线性数据。但要注意,PowerShell数组是固定大小的,频繁增删元素会影响性能。


二、哈希表:键值对的超级管家

如果说数组是收纳箱,那哈希表就是一个带标签的智能储物柜。通过键值对(Key-Value)存储数据,查找速度飞快。

# 创建一个哈希表
$person = @{
    Name = "张三"
    Age = 30
    Job = "工程师"
}

# 访问和修改值
Write-Host "$($person['Name']) 的年龄是 $($person.Age)"  # 输出: 张三 的年龄是 30
$person["Job"] = "高级工程师"  # 修改职位

# 添加新键值对
$person["Hobby"] = "编程"

# 遍历哈希表
$person.GetEnumerator() | ForEach-Object {
    Write-Host "键: $($_.Key), 值: $($_.Value)"
}

哈希表在配置管理、快速查找等场景非常高效。但要注意,键必须是唯一的,且哈希表的内存占用比数组稍高。


三、数组和哈希表的进阶玩法

1. 动态生成数组

PowerShell可以通过范围运算符或命令输出快速生成数组:

# 生成1到10的数组
$range = 1..10
# 通过命令生成数组
$processes = Get-Process | Select-Object -First 5 -ExpandProperty Name

2. 嵌套数据结构

数组和哈希表可以互相嵌套,构建复杂结构:

# 嵌套哈希表的数组
$team = @(
    @{ Name="Alice"; Role="Developer" },
    @{ Name="Bob"; Role="Designer" }
)

# 访问嵌套数据
Write-Host "第一个成员的角色: $($team[0].Role)"  # 输出: Developer

3. 使用Where-Object和ForEach-Object过滤

# 筛选年龄大于25的人
$people = @(
    @{ Name="Tom"; Age=22 },
    @{ Name="Jerry"; Age=28 }
)
$older = $people | Where-Object { $_.Age -gt 25 }

四、实际应用场景与技巧

1. 数据处理

假设你有一堆日志数据需要统计:

$logs = @(
    "ERROR: Disk full",
    "INFO: Backup completed",
    "ERROR: Network timeout"
)

# 统计错误类型
$errorCount = $logs | Where-Object { $_ -like "ERROR:*" } | Measure-Object
Write-Host "发现 $($errorCount.Count) 个错误"

2. 配置管理

用哈希表管理应用配置:

$config = @{
    Database = "MySQL"
    Port = 3306
    Credential = @{
        User = "admin"
        Password = "P@ssw0rd"
    }
}

# 安全地访问密码
$dbPassword = $config.Credential.Password

3. 注意事项

  • 性能:大数组或哈希表建议预分配大小(如$list = [System.Collections.ArrayList]::new())。
  • 不可变数组$array += "new item"实际会创建新数组,效率低。
  • 哈希表顺序:PowerShell 5.1及以下版本不保证键的顺序,7.0+版本保留插入顺序。

五、总结

PowerShell的数组和哈希表是数据处理的双子星:

  • 数组适合顺序访问和简单集合操作。
  • 哈希表在键值查询和配置管理上更胜一筹。
  • 结合Where-ObjectForEach-Object等命令,能高效解决复杂问题。

下次遇到数据难题时,不妨试试这对组合拳!