Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays PowerShell-创建忽略重复值的数组_Arrays_Powershell_Duplicates - Fatal编程技术网

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

Arrays PowerShell-创建忽略重复值的数组,arrays,powershell,duplicates,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 但从性能角度看,最好在将值输入数组时忽略该值,而不是在事实发生后过滤掉。如果在数组中插入大量项(数千项),则性能会下降,因为每次添加阵列时都需要重新初始化阵列,所以在性能方面,使用其他方法可能会更好 字典或哈希表可能是一种方法。可以使用$hash.Keys检索一维唯一数组,例如: $hash

好奇PowerShell中是否有这样的构造

我知道你可以做到:

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

但从性能角度看,最好在将值输入数组时忽略该值,而不是在事实发生后过滤掉。

如果在数组中插入大量项(数千项),则性能会下降,因为每次添加阵列时都需要重新初始化阵列,所以在性能方面,使用其他方法可能会更好

字典或哈希表可能是一种方法。可以使用$hash.Keys检索一维唯一数组,例如:

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

如果使用Set_项,则将创建或更新密钥,但不会重复。如果您不使用该值,请为该值添加其他内容,但可能您的问题也需要一个值。

您也可以使用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
} 
时间流逝:

  • 总秒数:00006581
  • 总毫秒数:06581

     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
    }
    
时间流逝:

  • 总秒数:00009261
  • 总毫秒数:09261

那么问题是什么?如果您想要一个保证不重复的数据结构,那么使用哈希表而不是数组。(根据定义,哈希表不能有重复的键。)我也会选择哈希表。易于使用,性能良好。也就是说,在需要读取数据时,插入副本然后删除副本可能更便宜。通过优化算法(比如sort-unique)批量完成的事情对于系统来说比您在enterpreter中拥有的代码要便宜得多。通常情况下:当您能够度量瓶颈时,要追求可读性,只关注性能。
$arr |排序对象-唯一-区分大小写