【发布时间】:2016-05-04 17:13:10
【问题描述】:
在 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);
【问题讨论】:
-
按什么排序???如果您可以修改对象,那么为什么首先使用哈希表(难以排序)?
-
@FrodeF。显然按哈希表中的
a元素排序。 -
@EtanReisner 是的,这是正确的 - 使用哈希表中的元素作为排序键对哈希表进行排序。
标签: sorting powershell powershell-2.0