gpt4 book ai didi

sorting - 在哈希表数组上使用排序对象

转载 作者:行者123 更新时间:2023-12-02 22:10:16 24 4
gpt4 key购买 nike

在PowerShell(版本2)中创建以下哈希表数组之后:

$array = @()
$array += @{a = 1; b = 5}
$array += @{a = 3; b = 4}
$array += @{a = 5; b = 9}
$array += @{a = 7; b = 2}

以下所有对Sort-Object的调用均返回相同的{a,b}序列:{5,9},{7,2},{1,5},{3,4}:
$array | Sort-Object
$array | Sort-Object -Descending
$array | Sort-Object a
$array | Sort-Object b
$array | Sort-Object "a"
$array | Sort-Object -Property a
$array.GetEnumerator() | Sort-Object
$array.GetEnumerator() | Sort-Object a

如果直接调用 $array,它将按输入对象的顺序返回对象,因此排序会更改顺序。但是也许它没有比较器,所以只是将每个对象都视为相等?

目标是对所有对象进行排序。对于涉及替代自定义对象,替代集合和/或替代排序例程的变通办法,我很好。

编辑:为了阐明我要实现的目标,这在C#中大致等效
class MyClass {
public int a;
public int b;
}

// somewhere inside a method:
var objects = new List<MyClass>();
// code here to populate objects with some MyClass instances.
var sorted = objects.OrderBy(x => x.a);

最佳答案

Sort-Object a不起作用,因为a不是属性,它是哈希表中的键。有人可能会感到困惑,因为即使PowerShell实际上在后台使用$ht.a,PowerShell也会通过接受$ht["a"]为您隐藏此内容,但是如果您运行$array | Get-Member,则可以确认属性a不存在。

一种解决方法是使用访问哈希表中键的计算所得属性进行排序。我使用Select-Object在表中显示哈希表,因此更容易查看结果。前任:

$array = @()
$array += @{a = 7; b = 2}
$array += @{a = 3; b = 4}
$array += @{a = 3; b = 1}
$array += @{a = 5; b = 9}
$array += @{a = 1; b = 5}

#No sort
$array | Select-Object @{n="a";e={$_.a}}, @{n="b";e={$_.b}}

a b
- -
7 2
3 4
3 1
5 9
1 5

#Sort by a asc, then b asc
$array | Sort-Object { $_.a }, { $_.b } | Select-Object @{n="a";e={$_.a}}, @{n="b";e={$_.b}}

a b
- -
1 5
3 1
3 4
5 9
7 2

关于sorting - 在哈希表数组上使用排序对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37034083/

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