唯一名称组合(共2个文件)

时间:2019-05-15 11:58:53

标签: powershell unique

我知道类似的问题已经问了好几次了,但是在我在线上进行的所有研究中,我所能找到的只是关于从单个阵列中获得独特组合的问题,依此类推,但是我可以做的只是我我在寻找有点不同。

我有一个脚本,该脚本通过从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

现在我如何找出一个可能有多少种独特的组合? (不是是唯一的,当您两次获得相同名称的组合时,否则是唯一的) 我认为我似乎无法找到找出算法的逻辑

抱歉,如果这太主观

1 个答案:

答案 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