如何解决在 PowerShell 上查找 Hashtable 的最小元素值是 - DateTime
有一个hashtable的视图: 键(字符串) - 值(日期时间)
必须在 Values (dateTime-s) 中找到最小值。 找不到通用方法来找到这样的值。唯一的办法就是像
$first_file_date = $dates_hash.Values | Measure-Object -Minimum -Maximum
Get-Date ($first_file_date);
虽然很明显我得到了结果 ($first_file_date) 实际值转换为 GenericObjectMeasureInfo 类型,我无法将其转换回 DateTime 以进一步工作。
有什么想法吗?
解决方法
您感兴趣的值存储在 Minimum
返回的对象的 Maximum
和 Measure-Object
属性中:
$measurement = $dates_hash.Values | Measure-Object -Minimum -Maximum
# Minimum/oldest datetime value is stored here
$measurement.Minimum
# Maximum/newest datetime value is stored here
$measurement.Maximum
如果您希望在单个管道中使用原始值,请使用 ForEach-Object
或 Select-Object
:
$oldest = $dates_hash.Values | Measure-Object -Minimum | ForEach-Object -MemberName Minimum
# or
$oldest = $dates_hash.Values | Measure-Object -Minimum | Select-Object -ExpandProperty Minimum
,
使用基于 LINQ 的替代解决方案补充 Mathias R. Jessen's helpful answer:
# Sample hashtable.
$hash = @{
foo = (Get-Date)
bar = (Get-Date).AddDays(-1)
}
# Note that the minimum is sought among the hash's *values* ([datetime] instances)
# The [datetime[] cast is required to find the appropriate generic overload.
[Linq.Enumerable]::Min([datetime[]] $hash.Values)
不幸的是,从 PowerShell 中使用 LINQ 通常很麻烦(请参阅 this answer)。 GitHub proposal #2226 提出改进建议。
,只需使用 Sort-Object
:
$dates_hash = @{
"a" = (Get-Date).AddMinutes(4)
"b" = (Get-Date).AddMinutes(5)
"c" = (Get-Date).AddMinutes(2)
"d" = (Get-Date).AddMinutes(5)
"e" = (Get-Date).AddMinutes(1)
"f" = (Get-Date).AddMinutes(6)
"g" = (Get-Date).AddMinutes(8)
}
$first_file_date = $dates_hash.Values | Sort-Object | Select-Object -First 1
或者如果你想要整个对象:
$first_file = $dates_hash.GetEnumerator() | Sort-Object -Property "Value" | Select-Object -First 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。