Arrays 具有多个条件的数组的唯一元素

Arrays 具有多个条件的数组的唯一元素,arrays,powershell,sorting,Arrays,Powershell,Sorting,我有一个数组,其中包含具有多个属性的对象。我使用其中两种进行排序,例如名称和数值(降序): 乔120 乔111 乔89 乔45 凯尔500 凯尔300 凯尔120 凯尔60 等等 我从多个来源收集这些数据,因此我的数组中每个名称的计数都相似 我只需要每个名称的第一行-最大的数值 这是一个相当大的数据集,有60k行。试图通过匹配用户列表并选择第一个实例来实现整个foreach。慢得令人痛苦 要在desc中设置数值,需要一些技巧: $sorted = $array | Sort-Object Nam

我有一个数组,其中包含具有多个属性的对象。我使用其中两种进行排序,例如名称和数值(降序):

乔120

乔111

乔89

乔45

凯尔500

凯尔300

凯尔120

凯尔60

等等

我从多个来源收集这些数据,因此我的数组中每个名称的计数都相似

我只需要每个名称的第一行-最大的数值

这是一个相当大的数据集,有60k行。试图通过匹配用户列表并选择第一个实例来实现整个foreach。慢得令人痛苦

要在desc中设置数值,需要一些技巧:

$sorted = $array | Sort-Object Name, @{Name='Money';expression = {$_.Money};Ascending = $false }
但是,unique switch只能与一个元素一起工作。 但如果我这样做:

$sorted |排序对象-属性名称-唯一


这弄乱了前面使用两个条件的排序,因此我没有得到该用户名的最大值:(

我将使用
组对象
,然后从结果中选择最高的数值

$array | Group-Object Name |
  Select-Object Name,@{n='Money';e={([int[]]$_.Group.Money | Sort-Object -Descending)[0]}}
说明:

组对象名称
将为每个原始
名称
创建一个唯一的条目,作为名为
名称
的新属性。每个条目都有一个
属性,其中包含具有相同
名称
值和相应的
货币
值的所有对象


选择对象
显示
名称
属性和计算的
货币
属性。
货币
属性获取货币值数组,将其强制转换为键入
[int]
,然后按降序排序。因为您只需要最高的值,所以只需要数组的第一个元素
[0]已选中。

使用哈希表保存每个
名称的最大值
值:

$maxValues=@{}
foreach($数组中的值){
if($maxValues[$value.Name]-ge$value.Money){
#金额较小,跳过更新
持续
}
$maxValues[$value.Name]=[int]$value.Money
}
$maxValues
哈希表现在将保存每个名称的最大金额:

PS C:\>$maxValues
名称值
----                           -----
乔120
凯尔500

非常感谢,我也找到了同样的解决方案,只是觉得一个独特的排序可以更快地完成。