高效地解析出键值数据

人气:613 发布:2022-10-16 标签: powershell key-value

问题描述

数据集:

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对象下,我尝试执行$_.Value操作,但这会返回项目以&Quot;Item#开头的每个唯一值

推荐答案

如果它是对象表,如:

$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>结构表:

$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

662