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