powershell - select 对象数组中的一个对象

powershell - select an object from an object array

我导入一个包含主键和一些数据的 CSV 文件,例如

key,data
1,one
2,two
3,three
4,four
5,five

我想要一条记录的 data 字段,基于 key 值。这就是我所做的

$db=import-csv data.csv
$data=($db|?{$_.key -eq 4}).data

有没有smarter/more写第二行的优雅方式?

PS。这一次,我坚持 PS v2

如果您知道键是升序的,没有间隙,并且从 1 开始,那么您可以按索引(从零开始):

$desiredKey = 4
$db[$desiredKey-1].data

但这似乎是一个冒险的假设,您的做法可能比这更好。

您可以构建一个 [hashtable] 然后进行直接查找:

$hash = @{}
$db | ForEach-Object { $hash[$_.key] = $_.data }

$db[4]

有更优雅的方式,但不确定性能:

# Convert CSV to Hashtable
$db = Import-CSV data.csv | Group-Object -AsHashTable -AsString -Property Key

然后您可以获得如下值:

  • PS 2.0: $($db.4).Data

  • PS 3.0 及更高版本:($db.4).Data

更多详情:Turning CSV-Files into "Databases"