高效解析键值数据

Efficently Parse out Key-Value Data

数据集:

Key         Value
Item#1      1
Item#1      2
Item#1      3
Item#2      4
Item#2      2
Item#2      3
Item#3      1
Item#3      2
Item#3      3

最终,最终目标是为每个唯一键提取第一个值。因此,例如从上面的数据集中,我想提取值 1、4 和 1,因为它是每个键的第一个条目。

我有这段代码,把它拉到唯一的键名,而不是值。我可能遗漏了一些简单的东西,所以感谢您的帮助

$CollectionTable.GetEnumerator() | Where-Object { $_.Key -Like 'Item#' } | Select-Object { $_.key } -Unique

在 Select-Object 下,我尝试执行 $_.Value,但是 returns 项目以“Item#”开头的每个唯一值

如果它是一个对象 table,例如:

$CollectionTable = ConvertFrom-Csv @'
Key,         Value
Item#1,      1
Item#1,      2
Item#1,      3
Item#2,      4
Item#2,      2
Item#2,      3
Item#3,      1
Item#3,      2
Item#3,      3
'@

它将是:

$CollectionTable |Group-Object Key |ForEach-Object { $_.Group[0].Value }
1
4
1

因为它似乎是 KeyValuePair<TKey,TValue> 结构的 table:

$CollectionTable = $CollectionTable |ForEach-Object {
    [Collections.Generic.KeyValuePair[String,Int]]::New($_.Key, $_.Value)
}

它将是:

$CollectionTable.Key |Get-Unique |ForEach-Object {
    ($CollectionTable |Where-Object Key -eq $_)[0].Value
}
1
4
1

您也可以为此使用 HashSet

$Keys = [System.Collections.Generic.HashSet[String]]::New()
$CollectionTable.Where{ $Keys.Add($_.Key) }.Value
1
4
1