PowerShell:如何从多维数组中获取单个列?

4
有没有一种函数、方法或语言结构可以在Powershell中从多维数组中检索单个列?
$my_array = @()
$my_array += ,@(1,2,3)
$my_array += ,@(4,5,6)
$my_array += ,@(7,8,9)

# I currently use that, and I want to find a better way:
foreach ($line in $my_array) {
    [array]$single_column += $line[1]    # fetch column 1
}
# now $single_column contains only 2 and 5 and 8

我的最终目标是从一个列中找到非重复的值。

3个回答

5
对不起,我认为没有类似的内容存在。我会选择以下方式:

抱歉,我认为不存在这样的内容。我的建议是:

@($my_array | foreach { $_[1] })

为了快速查找唯一值,我倾向于使用哈希表键的技巧:

$UniqueArray = @($my_array | foreach -Begin { 
    $unique = @{} 
} -Process { 
    $unique.($_[1]) = $null
} -End { 
    $unique.Keys 
})

显然,它有其局限性...

谢谢!在看到你提交之前,我刚找到了同样的解决方案。至于第二部分...嗯...我会尽力寻找更好的解决方案 :) - Gregory MOUSSAT
在PowerShell中,总有几种方法可以解决问题。 :) - BartekB

2
提取一列数据:
$single_column = $my_array | foreach { $_[1] }

提取任何列:
$some_columns = $my_array | foreach { ,@($_[2],$_[1]) }   # any order

要从一列中查找非重复值:

$unique_array = $my_array | foreach {$_[1]} | sort-object -unique
# caveat: the resulting array is sorted,
# so BartekB have a better solution if sort is a problem

1

我尝试了@BartekB的解决方案,它对我有效。但是对于独特的部分,我做了以下操作。

@($my_array | foreach { $_[1] } | select -Unique)

我对PowerShell不是很熟悉,但我发布这篇文章希望能帮助其他人,因为它对我有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接