PowerShell的:145 103
对原始评论者的更改已从
asker的每个注释消除。
码:
"$([array]::IndexOf(($s=(read-host)-split''|?{$_}),($x=$s|?{$_%2-eq0}|?{$_-gt0}|sort|select -f 1))),$x"
演练:
"... "引号内的所有内容都将包含在输出中。
$(... )括号之间的所有内容都将被视为命令,并且将包含该代码的输出,而不是命令本身。
[array]::IndexOf(... )这用于获取数组元素的索引。它的第一个参数是要搜索的数组对象。第二个参数是要找到的对象。这仅输出第一个匹配元素的索引。我尝试过IndexOf直接针对$s(例如:)使用一种方法$s.IndexOf($x),但是由于我尚未弄清楚的某些原因而失败-它声称该方法在该对象上不存在。
(... )括号内的表达式将是的第一个参数IndexOf。
$s= $ s将是存储用户输入的变量。
(read-host)-split'' 获取用户输入,并将其拆分为字符数组。
|?{$_}过滤掉由生成的多余的空数组元素-split''。
,(... )括号内的表达式将是的第二个参数IndexOf。
$x= $ s将是一个变量,用于存储用户输入中的最低偶数位。
$s|?{$_%2-eq0} 从$ s中取出偶数。
|?{$_-gt0} 使零无效。
|sort 对其余对象进行排序,默认顺序为升序。
|select -f 1 选择第一个对象,该对象现在将是最低的偶数位。
,$x上面的代码将输出我们最低偶数的索引。这将添加一个逗号,然后输出数字本身。
笔记:
这也许是规则4的延伸。如果没有偶数,输出将不包括第二个数字。
同样,如果输入包含非数字元素,这将引发一些非终止错误。该脚本仍将运行并提供正确的输出,但是您可能需要在运行之前将其设置$ErrorActionPreference为'SilentlyContinue'。