gpt4 book ai didi

arrays - 如何只允许一定长度的数组参数

转载 作者:行者123 更新时间:2023-12-05 03:16:46 27 4
gpt4 key购买 nike

我目前正在学习我的 PowerShell 模块的高级功能,并且要解决一个我认为在类里面没有适当涵盖的问题。

这里说的是问题。

Create an advanced function using Begin, Process, and End, that takes two(2) arguments. The first argument being an array of at least ten(10) integers and the second argument being a single integer. Search the array argument for every occurrence of the single integer argument then return the sum of all elements in the array excluding every occurrence of the single integer argument.

我无法计算出“至少十 (10) 个整数”部分。

这是我写的脚本。

function get-multisum
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$true)]
[ValidateLength(10)]
[array]$array,
[Parameter(Mandatory=$true)]
[int32]$num
)
Begin {
$total = 0
}
Process {
foreach($i in $array)
{
if($i -ne $num)
{
$total = $total + $i
}
else {
continue
}
}
}
End {
return $total
}
}

虽然我知道这可以写成...

function problem($array, $num)
{
foreach($i in $array)
{
if($i -ne $num)
{
$total = $total + $i
}
}
return $total
}

专门提示高级功能的问题。除了验证至少包含 10 个元素的数组之外,我的脚本按预期工作。我尝试了 [ValidateLength(10)] 但没有用。我不想在代码以一些 if 语句或你有什么开始之后运行检查。我很好奇是否一开始就只允许有效参数。提前致谢!

最佳答案

他们可能采用的解决方案可能与此不同,但您可以使用 [ValidateCount()] 属性验证传递给参数的项目数:

Function Test {
[CmdletBinding()]
Param(
[Parameter(Mandatory)]
[ValidateCount(10,[int]::MaxValue)]
[int[]]$IntArray,

[Parameter(Mandatory)]
[int]$SingleInt
)
if (($remainding = $IntArray.Where{$_ -ne $SingleInt}).Count -ne $IntArray.Count)
{
($remainding | Measure-Object -Sum).Sum
}
}

此处,10 是传递给该参数的最小值数量,[int]::MaxValue 是它可以传递的最大值。

所以下面应该失败:

test -IntArray (1..9) # fails

虽然这过去了:

test -IntArray (1..10)

同样值得注意的是,将其类型约束为 [int[]] 而不是 [array] 可能更接近他们的要求的。 [array] 也可以接受整数以外的其他值。

关于arrays - 如何只允许一定长度的数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74494355/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com