gpt4 book ai didi

arrays - 对于数组中的每个匹配,加一

转载 作者:行者123 更新时间:2023-12-03 01:02:02 25 4
gpt4 key购买 nike

我正在通过采用姓氏的前五个字符,姓氏的前三个字符,然后在该字符串的末尾添加001来分配用户ID。因此,将为名为Jo Doe的人分配“DOE__JO_000”作为他的用户ID。

如果此人的名字标准中名字少于3个字符和/或姓氏少于5个字符,我将添加一个“_”直到满足该条件。

现在,我可以找到匹配项并创建命名条件,但是如果有多个匹配项,则只有多个匹配项才增加一次。

我需要检查项目中是否已经存在分配给用户的ID,并且是否确实将新ID增加1?

例如,如果在项目中已经有一个名为Jo Doe的用户被分配了ID“DOE__JO_000”,那么我想向另一个Jo Doe加1,给他ID“DOE__JO_001”。但是,如果有第三个Jo Doe,则它将增加到“DOE__JO_002”。

这是我的代码:

$exIDArray = @("DOE__JO_000","DOE_JO_001","SMITHNAN000","ZAHN_THO000")

$lastFive = "Doe";
$lnFive = $lastFive.toUpper()

$l = $lastFive.length

do {

$lnFive += "_";
$l++;

} while ($l -lt 5)

$firstThree = "Jo";
$fnTHree = $firstThree.toUpper()

$f = $firstThree.length

do {

$fnThree += "_";
$f++;

} while ($f -lt 3)

$numID = "00"
$increment = 0;

$skyID = $lnFive + $fnThree + $numID + $increment

$exIDArray | foreach {
if ($skyID -in $_)
{
$increment++;
}
}

$skyID = $lnFive + $fnThree + $numID + $increment

Write-Output $skyID

最佳答案

让我们从数字问题开始。您已经检查过生成的ID是否已经存在,但是当它存在时,您将增加1,一次,然后重新生成ID,但是您不会再次执行相同的检查来查看是否已存在ID。新的ID也存在。

相反,您希望在不生成用户的情况下中断的循环中执行该比较/增量过程。

关于比较$exIDArray | foreach { if ($skyID -in $_) {} }的简要说明:无需遍历$exIDArray,因为-in运算符为您完成了此操作,因此您只需执行if ($skyID -in $exIDArray) {}即可,这是我在迭代循环示例中将要使用的:

$numID = "00"
$increment = 0

do {
$increment++
$skyID = $lnFive + $fnThree + $numID + $increment
} while ($skyID -in $exIDArray)

这将替换原始代码中从 $numID = "00"Write-Output的所有内容。

因此,在没有直接问题的情况下,我想提请注意其他一些事项。一方面,编写的代码(包括我的示例)将只允许 001009的userID,此后,您最终会得到 0010,这可能是不希望的。

为此,应单独使用 $increment,然后在适当的地方添加零。 That can be done with a format string, and the -f operator in PowerShell
$increment = 0

do {
$increment++
$skyID = '{0}{1}{2:d3}' -f $lnFive,$fnThree,$increment
} while ($skyID -in $exIDArray)

关于填充名字和姓氏字符串,此部分:
do {

$lnFive += "_";
$l++;

} while ($l -lt 5)

字符串具有方便的填充方法:
$lnFive = $lastFive.PadRight(5,'_')
$fnThree = $firstThree.PadRight(3,'_')

该数字是您想要的总长度,然后可以确定要添加多少个字符(如果有)。

结合以上所有元素,让我们看一下修改后的脚本的外观:
$exIDArray = @(
"DOE__JO_000",
"DOE_JO_001",
"SMITHNAN000",
"ZAHN_THO000"
)

$lastFive = "Doe"
$firstThree = "Jo"

$lnFive = $lastFive.ToUpper().PadRight(5,'_')
$fnThree = $firstThree.ToUpper().PadRight(3,'_')

$increment = 0;

do {
$increment++
$skyID = '{0}{1}{2:d3}' -f $lnFive,$fnThree,$increment
} while ($skyID -in $exIDArray)

Write-Output $skyID

关于arrays - 对于数组中的每个匹配,加一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54909218/

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