PowerShell - 创建一个忽略重复值的数组

时间:2017-10-30 18:50:51

标签: arrays powershell duplicates

好奇,如果PowerShell中有一个构造可以做到这一点吗?

我知道你可以这样做:

$arr = @(1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4)
$arr = $arr | Get-Unique

但是在性能方面似乎最好忽略该值,因为您将其输入数组而不是在事后过滤掉。

2 个答案:

答案 0 :(得分:1)

如果您将大量项目插入到数组(数千个)中,性能会下降,因为每次添加时都需要重新初始化数组,因此在您的情况下,性能可能会更好用别的东西。

字典或HashTable可能是一种方式。您可以使用$ hash.Keys检索您的单维唯一数组。例如:

$hash = ${}
$hash.Set_Item(1,1)
$hash.Set_Item(2,1)
$hash.Set_Item(1,1)
$hash.Keys
1
2

如果您使用Set_Item,将创建或更新密钥,但不会重复。如果你没有使用它,那就把它放在其他任何东西上了,但也许你也需要一个关于你的问题的价值。

答案 1 :(得分:0)

你也可以使用Arraylist:

     Measure-Command -Expression {
    $bigarray = $null
    $bigarray =  [System.Collections.ArrayList]@()
    $bigarray = (1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4)
    $bigarray | select -Unique
} 

时间过去了:

  • TotalSeconds:0,0006581
  • TotalMilliseconds:0,6581

     Measure-Command -Expression {
    $array = @(1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4)
    $array | select -Unique
    }
    

时间过去了:

  • TotalSeconds:0,0009261
  • TotalMilliseconds:0,9261