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
我导入一个包含主键和一些数据的 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