powershell - 从对象数组中选择一个对象

时间:2015-10-09 23:24:14

标签: powershell powershell-v2.0

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

是否有更智能/更优雅的方式来编写第二行?

PS。在这个时候,我坚持使用PS v2

2 个答案:

答案 0 :(得分:1)

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

# 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"

答案 1 :(得分:0)

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

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

但这似乎是一个冒险的假设,你做这件事的方式可能比这更好。

您可以构建[hashtable],然后执行直接查找:

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

$db[4]