gpt4 book ai didi

powershell - 获得独特的值(value)

转载 作者:行者123 更新时间:2023-12-03 01:04:13 25 4
gpt4 key购买 nike

我们正在尝试优化一些代码,以尽快删除Array中的重复项。通常,可以通过将输入管道传递到Group-Object然后仅使用Name属性来轻松完成此操作。但是我们希望避免使用管道,因为它比较慢。

但是,我们尝试了以下代码:

[System.Collections.ArrayList]$uniqueFrom = @() 

$From = @('A', 'A', 'B')

$From.Where({-not ($uniqueFrom.Contains($_))}).ForEach({
$uniqueFrom.Add($_)
})

$uniqueFrom

从理论上讲,这应该起作用。但是由于某种原因,输出不是预期的 @('A', 'B')。为什么不重新评估 ArrayList子句中的 .where

最佳答案

以我的经验,可以通过使用DataView来减少“管道过滤”以获得唯一值。如果要处理数组,则需要先将其转换为DataTable,然后才能使用DataView获得值。

例如

$arr = @('val1','val1','val1','val2','val1','val3'....)

$newDatatable = New-Object System.Data.Datatable
[void]$newDatatable.Columns.Add("FetchUniqueColumn")

foreach($e in $arr)
{
$row = $newDatatable.NewRow()
$row.Item('FetchUniqueColumn') = $e
$newDatatable.Rows.Add($row)
}

$filterDataView = New-Object System.Data.Dataview($newDatatable)
$UniqueDT = $filterDataView.ToTable($true,'FetchUniqueColumn')
$UniqueValues_array = $UniqueDT.Rows.FetchUniqueColumn

请注意,如果您输入的是 DataTable,则这样做的速度要快得多,因为在从数据 View 创建 DataView数据表时,您无需再为 $true的唯一值设置 $UniqueDT过滤器之前就进行转换:
$UniqueDT = $filterDataView.ToTable($true,'FetchUniqueColumn')

通过查询来自SQL的3000行数据表的1列进行测试。
我的结果如下:
**With 1 column Data Table as input
Select -Unique - 300 ms
Using DataView - 21 ms

**With @() array as input (converted SQL results to array prior to benchmarking)
Select Unique - 262 ms
Using DataView - 106 ms

关于powershell - 获得独特的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com