相关疑难解决方法(0)

从数组的属性获取唯一索引项的最快方法

制作一个像这样的数组,它代表我正在寻找的内容:

$array = @(1..50000).foreach{[PSCustomObject]@{Index=$PSItem;Property1='Hello!';Property2=(Get-Random)}}
Run Code Online (Sandbox Code Playgroud)

获取索引属性“43122”的项目的最快方法是什么?

我有一些想法,但我觉得必须有一种更快的方法:

管道在哪里

measure-command {$array | where-object index -eq 43122} | % totalmilliseconds
420.3766
Run Code Online (Sandbox Code Playgroud)

哪里的方法

measure-command {$array.where{$_ -eq 43122}} | % totalmilliseconds
155.1342
Run Code Online (Sandbox Code Playgroud)

首先制作一个哈希表并查询“索引”结果。起初很慢,但随后的查找速度会更快。

measure-command {$ht = @{};$array.foreach{$ht[$PSItem.index] = $psitem}} | % totalmilliseconds
124.0821

measure-command {$ht.43122} | % totalmilliseconds
3.4076
Run Code Online (Sandbox Code Playgroud)

有没有比先构建哈希表更快的方法?也许是不同的 .NET 数组类型,例如某种特殊类型的索引列表,我可以最初将其存储在其中,然后运行一个方法来根据唯一属性提取项目?

powershell

6
推荐指数
2
解决办法
2931
查看次数

通过使用Powershell比较Array来获取Missing元素

可能重复:
比较两个数组并获得不常见的值

我想要一种逻辑来从数组中获取不常见的项目,例如:

$a=@(1,2,3,4,5,6)
$b=@(1,2,3,4,5,7,9,10)
Run Code Online (Sandbox Code Playgroud)

我希望输出$c为6,这是$b数组中缺少的元素,应仅将的内容赋予优先级$a

谁能帮我这个忙吗?
谢谢!

arrays powershell

2
推荐指数
1
解决办法
2595
查看次数

找出两个非常大的列表中的不同之处

我有两个列表,每个列表大约有 1k 人。我要做的就是找出两者之间剩下的是谁。

$BunchoEmail = Import-Csv C:\temp\Directory.csv | Select-Object primaryEmail -ExpandProperty primaryEmail

$GoogleUsers = gam print users fields suspended | ConvertFrom-Csv | Where-Object suspended -ne $true | Select-Object primaryEmail -ExpandProperty primaryEmail

$objects = @{
    ReferenceObject  = $GoogleUsers
    DifferenceObject = $BunchoEmail
}
Compare-Object @objects
Run Code Online (Sandbox Code Playgroud)

以上没有产生我想要的。

找到不同之处的最佳方法是什么?

powershell set-difference compareobject

1
推荐指数
1
解决办法
56
查看次数