Powershell 两个文件中的唯一名称组合

Powershell 两个文件中的唯一名称组合,powershell,unique,Powershell,Unique,我知道类似的问题以前也被问过很多次,但在我在网上做的所有研究中,我所能找到的都是关于从单个阵列中获得独特组合的问题等等,但我可以做到,但我所寻找的有点不同 我有一个脚本,它通过从一个txt.file文件中获取名字和另一个文件中获取姓氏来生成名字,然后随机创建一个名字,该脚本还生成重复的名字,所以我想知道,如何获得所有可能的唯一组合的数量? 考虑到每个text.file有20项(lastnames文件有20项) 这是我的剧本: $FirstName = Import-Csv C:\Users\my

我知道类似的问题以前也被问过很多次,但在我在网上做的所有研究中,我所能找到的都是关于从单个阵列中获得独特组合的问题等等,但我可以做到,但我所寻找的有点不同

我有一个脚本,它通过从一个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)] 
}
}
结果是这样的(基于所选的性别):

现在我怎么才能知道一个人可能有多少种独特的组合呢? (如果两次获得相同名称的组合,则不唯一,否则它是唯一的) 我觉得我似乎找不到逻辑来找出一个算法


抱歉,如果这太主观了

生成两个唯一列表的所有唯一组合就像编写嵌套循环一样简单:

$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

您可以通过管道将输出传输到
Sort Object-Unique
以获取唯一列表。然后您可以使用该输出数组的count属性:
($output | Sort Object-Unique)。count
可能我遗漏了一些内容,但可以肯定的是,可能的名称数就是名字数(可能限制为m或F)乘以姓氏的数量。如果您有3个名字(a、b、c)和2个姓氏(d、e),则您只能生成6个(即3x2)可能的名字(ad、ae、bd、be、cd、ce)(假设它们必须是“first-last”)。事实上,你随机选择的名字对这个限制没有任何影响。@boxdog,你是对的,伙计,我已经知道了,但你只是缺少了一点,我不是在问如何用数学方法来做,我想知道如何用PS来做
if($Gender -like 'm') {
  $NamesToPickFrom = $AllMaleNames
}
else {
  $NamesToPickFrom = $AllFemaleNames
}

$NamesToPickFrom | Get-Random -Count $NumberOfCombinations