如何为我在powershell中创建的类定义默认排序顺序



我创建了一个小型powershell类

Class StatSummary {
[String] $name
[int] $errors = 0
}

当我有一个此类实例的集合时,我希望它们在默认情况下按$name升序(或降序(排序。我在有关排序对象的文档中找到了对默认排序属性的引用,但找不到如何使用自己的类执行此操作的示例。当然,我可以通过将属性名称传递给sort Object来使集合进行不同的排序,但我也想定义一个默认值。感谢您的帮助。

实现System.IComparable接口-它只需要一个方法CompareTo():
Class StatSummary : IComparable {
[String] $name
[int] $errors = 0
[int]
CompareTo([object]$other)
{
return $this.name.CompareTo($other.name)
}
}

在上面的例子中,我们简单地比较了name属性:

PS C:> 'Zoe', 'Andrew', 'Kate' |ForEach-Object {
>>   [StatSummary]@{ name = $_ }
>> } |Sort-Object |Select -Expand name
Andrew
Kate
Zoe

但你可以做任何你需要的事情,比如在name上排序,然后递减errors:

[int]
CompareTo([object]$other)
{
$n = $this.name.CompareTo($other.name)
if($n -eq 0){
return -$this.errors.CompareTo($other.errors)
}
return $n
}

最新更新