我用作数组的文件有一个数字列表,我试图通过仅使用foreach
循环来显示最大的数字。
我当前的代码检查数组中的每个项目,并将其与当前已知的最大值(最初设置为0)进行比较,然后如果数组中的数字大于当前{$largest
值,则更改$largest
值。 1}}值。
$largest = 0
$TheFile = Get-Content -path .\number.txt
foreach ($number in $TheFile) {
if ($number -gt $largest) {
$largest = $number
}
}
Write-Host $largest
答案 0 :(得分:1)
试试这个 -
$TheFile = Get-Content -path .\number.txt
$TheFile | measure -Maximum
PowerShell有一个Measure-Object
cmdlet,可帮助您测量数字数组的最大值,最小值,平均值,总和等。请参阅此link。
顺便说一下,你的上述逻辑对我来说很好。我没有看到任何错误。你可以做的一件事是在这里设置绝对路径
$TheFile = Get-Content -path \\AbsolutePathOfTheTextFile\number.txt
答案 1 :(得分:0)
所以我决定在我的机器上尝试你的代码,令人惊讶的是,它遇到了你所遇到的同样问题。我正在运行PS 5.0,而不是它很重要,因为答案在于PowerShell的行为方式。
我正在调试此行$number -gt $largest
,试图查找其数据类型。
$number.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
这让我意识到Powershell不会将$number
视为Integer/Double
而是string
,这就是-gt
操作异常行为的原因。我想是这样的,因为源是使用Get-Content
读取的,假设输入是字符串。
只需键入强制转换$number
应修复此问题,因为这会告诉PowerShell如何将此对象视为。例如,您可以使用[Int]$number
或[Double]$number
(如果您想要考虑浮点数)。
所以您的代码现在变为:
$largest = 0
$TheFile = Get-Content -path .\num.txt
foreach ($number in $TheFile)
{
if ([Double]$number -gt $largest)
{
$largest = $number
}
}
Write-Host $largest