arrays - 在特定列上对数组进行排序的问题
问题描述
在特定列上对数组进行排序时出现问题。
[PSObject[]]$arr = @()
$arr += [PSObject]@{
who = 'z';
what = 'snake';
where = 'c1';
when = 'd1'
}
$arr += [PSObject]@{
who = 'z';
what = 'beer';
where = 'c1';
when = 'd1'
}
$arr += [PSObject]@{
who = 'a';
what = 'snake';
where = 'c1';
when = 'd1'
}
$arr += [PSObject]@{
who = 'b';
what = 'ape';
where = 'c1';
when = 'd1'
}
$arr | Sort-Object what
输出:
名称 值 ---- ----- 其中c1 谁 当 d1 什么蛇 其中c1 谁 当 d1 什么猿 其中c1 谁z 当 d1 什么蛇 其中c1 谁z 当 d1 什么啤酒
因此没有按“什么”排序。
请问有什么想法吗?
解决方案
将哈希表转换为[PSObject]
不符合您的预期。PSObject
已经是您定义的哈希表的基本类型,因此您的代码仅创建哈希表列表,而不是创建自定义对象列表。要从哈希表创建自定义对象,请改用PSCustomObject
类型加速器(需要 PowerShell v3 或更高版本,在旧版本上使用New-Object
cmdlet)。
示范:
PS C:\> $ht = @{'a'='b'; 'c'='d'} PS C:\> $ht.GetType().FullName System.Collections.Hashtable PS C:\> $ht.PSBase.GetType().FullName System.Management.Automation.PSObject PS C:\> $ht 名称 值 ---- ----- 光盘 抗体 PS C:\> $o1 = [PSObject]$ht PS C:\> $o1.GetType().FullName System.Collections.Hashtable PS C:\> $o1.PSBase.GetType().FullName System.Management.Automation.PSObject PS C:\> $o1 名称 值 ---- ----- 光盘 抗体 PS C:\> $o2 = [PSCustomObject]$ht PS C:\> $o2.GetType().FullName System.Management.Automation.PSCustomObject PS C:\> $o2.PSBase.GetType().FullName System.Management.Automation.PSObject PS C:\> $o2 约 - - D b
推荐阅读
- linux - 如何在 Fedora 上安装 zenmap
- javascript - jquery如何映射到这段代码中的init函数
- python - 无法使用 PyGame 在顶部栏添加 ICON
- java - 我很好奇 Spring Boot 与 Apache Spark 数据集的集成
- html - 曲线在反应中没有粘在页面的最右边
- javascript - 在反应组件/随机数中使用useState随机更改两个div的状态
- opentok - Tokbox Publisher 成为网络订阅者
- java - 为什么 logback 有时会输出额外的空行
- acumatica - 数据视图不使用投影 DAC 刷新
- javascript - 在 jQuery 中启用和禁用空格键