我知道类似的问题已经问了好几次了,但是在我在线上进行的所有研究中,我所能找到的只是关于从单个阵列中获得独特组合的问题,依此类推,但是我可以做的只是我我在寻找有点不同。
我有一个脚本,该脚本通过从txt.file中获取名字和从另一个中获取姓氏来生成名称,然后随机创建一个名称,该脚本也生成重复项,所以我想知道如何获取所有可能独特的连击? 考虑到每个text.file有20个项目(lastnames文件有20个项目。
这是我的脚本:
$FirstName = Import-Csv C:\Users\myuser\Desktop\Firstname.txt -Delimiter ';' -Header Name, Gender
$LastName = Get-Content C:\Users\myuser\Desktop\Lastnames.txt
[array]$FirstNameMan = $null
[array]$FirstNameWoman = $null
[int]$NumberOfCombinations = Read-Host 'Enter the number of combinations you wish'
[string]$Gender = Read-Host 'Gender: Enter "M" for "man" or "W" for "woman"'
# here i split the names by gender
for ($i = 0; $i -lt $FirstName.Count; $i++) {
if ($FirstName[$i].Gender -like 'mann') {
$FirstNameMan += $FirstName[$i].Name
}
else {
$FirstNameWoman += $FirstName[$i].Name
}
}
#random join
For ($j = 0; $j -lt $NumberOfCombinations; $j++) {
if ($Gender -like 'm') {
$FirstNameMan[(Get-Random $FirstNameMan.Count)] + ', ' + $Lastname[(Get-Random $Lastname.Count)]
}
else {
$FirstNameWoman[(Get-Random $FirstNameWoman.Count)] + ', ' + $Lastname[(Get-Random $Lastname.Count)]
}
}
结果将是这样(根据所选性别):
Katja, Schult
Mary, Krüger
Ruth, Meier
Ruth, Bauer
Katja, Bauer
Katja, Schneider
Mascha, Möller
Ruth, Schröder
Sara, Meier
现在我如何找出一个可能有多少种独特的组合? (不是是唯一的,当您两次获得相同名称的组合时,否则是唯一的) 我认为我似乎无法找到找出算法的逻辑
抱歉,如果这太主观
答案 0 :(得分:1)
生成两个唯一列表的所有唯一组合就像编写嵌套循环一样简单:
$AllMaleNames = foreach($first in $FirstNameMan){
foreach($last in $Lastname){
"$first, $last"
}
}
$AllFemaleNames = foreach($first in $FirstNameWoman){
foreach($last in $Lastname){
"$first, $last"
}
}
现在您可以从这些列表中进行选择:
if($Gender -like 'm') {
$NamesToPickFrom = $AllMaleNames
}
else {
$NamesToPickFrom = $AllFemaleNames
}
$NamesToPickFrom | Get-Random -Count $NumberOfCombinations