有效地找到极值

时间:2014-03-09 23:37:31

标签: sorting powershell max

common answer到“我如何找到最新的文件”是:

dir | Sort-Object -Property LastWriteTime | Select-Object -Last 1

这对于大量文件来说效率不高。

是否有内置的方法来有效地找到极值?

4 个答案:

答案 0 :(得分:3)

对于更多的.NET程序员而言: - )

[Linq.Enumerable]::First([Linq.Enumerable]::OrderByDescending((new-object IO.DirectoryInfo $pwd).EnumerateFiles(), [Func[IO.FileInfo,DateTime]]{param($f) $f.LastWriteTime}))

这将返回完整的.NET FileInfo对象。它似乎与@ mjolinor的解决方案执行的顺序相同 - 在有限的测试中。

答案 1 :(得分:2)

另一种方法:

$newest = $null
dir | % { if ($newest -eq $null -or $_.LastWriteTime -gt $newest.LastWriteTime) { $newest = $_ } }
$newest

答案 2 :(得分:2)

我知道要实现大目录的最快方法是:

(cmd /c dir /b /a-d /tw /od)[-1]

答案 3 :(得分:1)

这是一种方法。函数Max

function Max ($Property)
{
    $max = $null
    foreach ($elt in $input)
    {
        if ($max -eq $null) { $max = $elt }

        if ($elt.$Property -gt $max.$Property) { $max = $elt }
    }

    $max
}

可用于定义Newest

function Newest () { $input | Max LastWriteTime }

可以这样称呼:

dir | Newest

它也可用于定义Largest

function Largest () { $input | Max Length }

E.g:

dir -File | Largest

同样,Min可用于定义OldestSmallest

function Min ($Property)
{
    $min = $null
    foreach ($elt in $input)
    {
        if ($min -eq $null) { $min = $elt }

        if ($elt.$Property -lt $min.$Property) { $min = $elt }
    }

    $min
}

function Oldest () { $input | Min LastWriteTime }

function Smallest () { $input | Min Length }